3

同じメンバーを持つわずかに異なる 2 つのクラスが必要ですが、クラスの 1 つはユーザーによる相互作用の可能性を少なくする必要があります。私は最初のクラスから 2 番目のクラスを継承することを望んでいます。
子クラスから親メソッドへのアクセスを制限して、誰かが子オブジェクトを作成した場合に、特定の親クラス メソッド (親クラスで公開されている) にアクセスできないようにする方法はありますか?

4

4 に答える 4

7

いいえ、その理由は次のとおりです。

class Animal { 
   public void Speak() { Console.WriteLine("..."); }
}

class Dog : Animal { 
   remove void Speak();  // pretend you can do this
}

Animal a = GetAnAnimal(); // who knows what this does

a.Speak();  // It's not known at compile time whether this is a Dog or not
于 2012-06-12T01:46:25.847 に答える
6

両方のクラスに共通するものを保持するための基本抽象クラスが必要であり、それから他の 2 つのクラスがそれを継承してメソッドやプロパティなどを追加できるようにする必要があります。

abstract class MyBaseClass
{
    public int SharedProperty { get; set; }

    public void SharedMethod()
    {
    }
}

class MyClass1 : MyBaseClass
{
    public void Method1()
    {
    }
}

class MyClass2 : MyBaseClass
{
    public void Method2()
    {
    }
}

MyClass1があります: SharedPropertySharedMethod、およびMethod1

MyClass2があります: SharedPropertySharedMethod、およびMethod2

于 2012-06-12T01:43:33.053 に答える
2

正確には違います。最も近いのは、基本 (親) クラスで仮想メソッドを提供し、派生 (子) クラスでそれらをオーバーライド/新規作成し、必要に応じて動作または例外を提供しないことです。

public class Base
{
    public virtual void DoSomething()
    { . . . }
}

public class Derived : Base
{
    public override void DoSomething()
    { 
        throw new NotSupportedException("Method not valid for Derived");
    }
}
于 2012-06-12T01:44:13.473 に答える
0

基本クラスを作成し、非表示にする必要があるメソッドを保護します。

公開したいメソッドを宣言するインターフェイスを作成します

基本クラスから継承された子クラスを作成し、インターフェイスを明示的に実装します。インターフェイス実装メソッドから保護されたメソッドを呼び出します。

次に、子クラスのユーザーはインターフェイスのメンバーのみを表示できます (これには、インスタンスをインターフェイスとしてキャストする必要があります)。

于 2012-06-12T01:49:24.457 に答える