0

Xna3 を使用していますが、継承の原則が機能しません。

私はこの1つのクラスを持っています:

public class Papa{
  protected int winHeight = 10;
}

で、〜がある

public class Son:Papa{
   int some = winHeight;
}

base.winHeight も試してみました。何らかの理由で、行ごとにデバッグすると、親の winHeight の値が値 10 であることがわかりますが、Son クラスにジャンプすると 0 になります。

私がしていることに何か問題があると思いますが、オンラインで見つけたすべてのページは、これがその方法であると言っているようです.

ありがとう

4

1 に答える 1

1

興味深いことに、このコードは実際には VS2012 でコンパイルされず、「非静的フィールド、メソッド、またはプロパティ 'Papa.winHeight' にはオブジェクト参照が必要です」というエラーが表示されます。あなたのものは確かにコンパイルされますか?

変数は、初期化子を持つフィールドとして宣言されます。コードがコンパイルされていると仮定すると、これらの初期化子が (派生クラスと基底クラスの間で) 実行される順序はsome = winHeightwinHeight = 10.

代わりに、フィールドが初期化Sonされた後に呼び出されるコンストラクターに初期化を入れることをお勧めします。Papa

public class Son : Papa
{ 
   int some; 

   public void Son()
   {
      some = winHeight;
   }
} 
于 2012-08-23T10:53:40.943 に答える