0

基本クラスで子クラスのプロパティにアクセスする最良の方法は何ですか? 継承を使用している場合、プロパティではなくメソッドのみに依存する必要があるようです [別のクラスには別のプロパティ セットが存在するため]。基本クラスから子クラスのプロパティにアクセスするための推奨される安全な方法はありますか? または、これはコードをリファクタリングするための好ましい方法であり、基本クラスを介して子クラスのメンバーにアクセスできます。仮想関数の使用方法は知っていますが、それを使用して子クラス メンバー変数の値を設定する方法がわかりません。

class Abc
{
  public int Abc_1 {get;set;}
  private int _abc;

  virtual int DoCalculationonAbc(int a)
  {
    return abc_1 * a;
  }

  virtual void SetValueToPrivate(int a)
  {
    _abc = a;
  }
}

class Def:Abc
{
  private int _def;
  private int _def2;
  public int Def_2{get;set;} // what is the preferred way to set values this property

  override public void SetValueToPrivate(int a)
  {
     _def = a;
     //_def2 = ??
  }
}

Main()
{
  Abc ab = new Def();
}
4

3 に答える 3

1

このようなことをしたいときは、スーパークラスでどのプロパティを利用したいかを前もって知っておく必要があります。サブクラスが独自のルールに従ってそれらを設定できるように、基本クラスで保護されていると宣言します。

_def2前述のように、子の新しく宣言されたプロパティ (や_defin classなどDef) に基本クラスからアクセスすることはできません。

子型をインスタンス化し、それを のようなスーパー型に割り当てると、としてAbc ab = new Def()扱うことを決定することになります。は確かに ですが、 として操作する必要があります。abAbcDefababDefAbc

同様にDef、関数に aを渡す場合、その関数は としてsomeFunction(Abc ab)扱う方が適切です。は、 の子の型を処理するために作成されますが、 で定義されている共通のプロパティとメソッドによってのみ処理されます。abAbcsomeFunction(Abc ab)AbcAbc

于 2012-12-08T13:17:24.000 に答える
0

子クラスのメンバーは、どのクラスが継承したかわからないため、基本クラスからアクセスできません。子クラスのメンバーに到達する唯一の方法は、ポリモーフィズムとダウンキャストによって達成されます。

    class Base{
        public Base();
        int a;
    }

    class Derived : Base{
        public Derived();
        public int b;
    }
    Base testBase = new Test;
    Base testDerived = new Derived;
    testBase.a = (Derived)testDerived.b; // Downcasting here.
于 2012-12-31T13:57:43.093 に答える