2017-08-01 10 views
0

派生した静的コンストラクタが次のコードで呼び出されないのはなぜですか?派生。<Baseからの静的変数>は派生の静的コンストラクタを呼び出さない

class Base 
{ 
    public static Base Instance; 
    static Base() { Console.WriteLine("Static Base invoked."); } 
} 

class Derived : Base 
{ 
    static Derived() { 
     Instance = new Derived(); 
     Console.WriteLine("Static Derived invoked."); 
    } 
} 

void Main() 
{ 
    var instance = Derived.Instance; 
} 

OUTPUT: 
Static Base invoked. 

答えて

2

派生クラスを介してベースクラスの静的メンバにアクセスが実際に基底クラス、そのメンバーを宣言した1を通過するようにコンパイルされているためです。

はそのように、この:

Derived.Instance 

は、実際にこのようにコンパイルされます。

Base.Instance 

したがって一切のコードはDerivedに触れず、その静的コンストラクタが呼び出されていない理由です。私はC#の仕様で右の通路を見つけることができませんよ

IL_0000: ldsfld  Base.Instance 
IL_0005: pop 
IL_0006: ret 
+0

:ここ

は、自分のメインメソッドが(リリース)にコンパイルされる方法です。私はそれがそこにあると確信しています、私はちょうど検索するための正しいフレーズを見つけるように見えることができません。 –

関連する問題