C#では実際に動作するこのコンパイルと実行はできますが、正しく動作しません。C#の子クラスの親クラスの配列メンバーを初期化する
public abstract class Foo
{
public int[] a;
}
public class Bar : Foo
{
public int[] a = new int[123];
}
これを使用する必要がありますか(うまく動作しますが、上記のコードと同じようには見えません)。
public abstract class Foo
{
public int[] a;
public void Init(int size)
{
a = new int[size];
}
}
public class Bar : Foo
{
public Bar()
{
Init(123);
}
}
"達成するためには何をしますか?最初のクラスは基本クラスの 'a'をシャドーイングしています。これはかなり混乱することがあります。コンストラクタを使用することは通常、再宣言よりも好ましいが、意図どおりに意図に依存する。 – dlatikay
これを行う必要がありますpublic int [] a = new int [123];基本抽象クラスのいずれか、または子クラスがそれを実装することを期待する場合は、それをabastractとしてマークする必要があります。public abstract int [] a; – Isma
バーでは、_a = new int [123]; _を抽象クラスによって継承されたものを再宣言することなく書き出します。 – Steve