私は、単一のスタティックフィールドを持つ単純なベースクラスを持っています。私は、この基本クラスから派生した多数のクラスを持っています。派生クラスを作成すると、静的フィールドを初期化する基本クラスstatic ctorの呼び出しが発生します(期待通りに動作します)。問題は、別の派生クラスを作成して同じベースから継承すると、ベースの静的フィールドがまだヌルであることです。それは私がインスタンス化した最初のクラスによって初期化されました。スタティックフィールドのライフタイム(ベースクラス)
基本クラスの静的フィールドにはグローバル割り当てがあり、すべての派生クラスに表示(共有)しないでください。
マイモデル:
class Base<T>
{
protected static object s_field = null;
static Base { s_field = new object(); }
}
class Derived1<T> : Base<T>
{
}
class Derived2<T> : Base<T>
{
}
// ... later in the program
Derived1<int> instance1 = new Derived1<int>(); // initializes static field (s_field in base class) for all derived types
Derived2<double> instance2 = new Derived2<double>(); // the static field is null
(私は、デバッガを介してこれを見ることができますが、それはすでに前の行??によって初期化されていないはずです)
タイトルに「C#.net - 」というプレフィックスを付けないでください。それがタグのためのものです。 –
@ActiveXこれはプログラムで実行できる唯一の実行行ですか?静的フィールドがヌルに設定されている 'instance1'のインスタンス化と、instance2'オブジェクトがヌル値を持つように見える間のどこかで可能でしょうか?これは、2つのオブジェクトを同時に比較することによって、検証される可能性があります。一方がnullで他方がそうでない場合は、何かを残しておきます。 –
そうでしょう。私はあなたのスニペットを試して、静的フィールドはnullではありません。だからこそ、あなたが見ているものは、その原因はここに掲載されたコードにはありません –