コンストラクタが呼び出される前に静的フィールドの初期化を完了する必要がありますか?静的フィールドの初期化はどのようにC#で動作するのですか?
次のプログラムは、私に間違っていると思われる出力を提供します。
new A()
_A == null
static A()
new A()
_A == A
コード:
public class A
{
public static string _A = (new A()).I();
public A()
{
Console.WriteLine("new A()");
if (_A == null)
Console.WriteLine("_A == null");
else
Console.WriteLine("_A == " + _A);
}
static A()
{
Console.WriteLine("static A()");
}
public string I()
{
return "A";
}
}
class Program
{
static void Main(string[] args)
{
var a = new A();
}
}
Dang!私にそれを打つ! –
すべての点を尊重します...静的コンストラクタが最初に実行されません。静的フィールドイニシャライザが最初に実行されます。 – Prankster
A._Aの構築は静的コンストラクタで行われます。コンパイラは、C#静的コンストラクタで宣言されたコードの前に静的コンストラクタ(.cctor)内のすべてのフィールドの初期化をプリペンドします。 –