2017-02-02 4 views
-1

これは非常に簡単な例ですが、私は困惑しており、これを動作させることはできません。親クラスの値を設定し、派生クラスにアクセスしてください

親クラス "1"に設定された値を "1"をチェックすることによって派生クラスから取得しようとしていますが、常にelse文 "3"を返します。派生クラス内からこの値にアクセスするには? 。 これを修正する方法のお勧めは歓迎されます。

class Program 
    { 
     static void Main(string[] args) 
     { 
      Parent parent = new Parent(); 
      Child child = new Child(); 

      parent.SetA = 1; 

      double test = child.GetA(); 
      Console.WriteLine(test); 
     } 
    } 


    class Parent 
    { 
     protected int A; 

     public int SetA 
     { 
      get { return A; } 
      set { A = value; } 
     } 
    } 


    class Child : Parent 
    { 
     public int GetA() 
     { 

      if (A == 1) 
      { 
       return 2; 
      } 
      else 
      { 
       return 3; 
      } 
     } 
    } 
+2

'child'と' parent'は2つの異なるオブジェクト(インスタンス)ですので、変数の状態を変更しても変数に影響はありません。あなたが何を期待しているのか分かりません。私は何か見落としてますか? –

答えて

1

2つのインスタンスがあります。 あなたはそれは、あなたが2つの別々のオブジェクトを使用しているが指摘されていたよう子供

child.SetA = 1; 
0

にSETAを呼び出す必要があり、それらは各々が瀬田の独自のコピーを持っています。

共有する場合は、静的にする必要があります。親から派生したクラスのすべてのインスタンスは、同じ値をシェービングします。

0

Parentクラスではなく、parentオブジェクトにAを設定します。 ChildParentのすべてを継承します。つまり、ChildにはSetAメソッドがあるため、child.SetAを使用して子の値を設定できます。クラスのインスタンスの値ではなく、クラスのデフォルト値を変更しようとしています。

関連する問題