下面的代碼:爲什麼靜態字段初始化發生在靜態構造函數之前?
static void Main(string[] args)
{
Console.WriteLine("0");
string h = Foo.X;
Console.WriteLine("2");
}
public static class Foo
{
public static string X = ((Func<string, string>)delegate(string g)
{
Console.WriteLine(g);
return (g);
})("_aaa");
static Foo()
{
Console.WriteLine("ctor");
}
}
會打印:
0
_aaa
ctor
2
我知道的beforefieldinit
行爲(有/無靜態構造函數等)。
我不明白的事情是爲什麼ctor
(輸出)是_aaa
後?
它沒有任何意義,如果我想在構造函數中初始化變量呢?
問題
爲什麼的X
初始化是ctor
過嗎?
當然,非靜態字段和非靜態構造函數類似:class Foo {public string X =「A」; public Foo(){X =「B」; }}'如果你做了'(new Foo())。X',你得到''B'',而不是''A'',因爲''B''的賦值最後發生了(覆蓋了第一個值)。 –
@JeppeStigNielsen感謝您的澄清 –