型に静的コンストラクターがない場合、フィールド初期化子は、型が使用される直前、またはランタイムの気まぐれでいつでも実行されます。
なぜこのコード:
void Main()
{
"-------start-------".Dump();
Test.EchoAndReturn("Hello");
"-------end-------".Dump();
}
class Test
{
public static string x = EchoAndReturn ("a");
public static string y = EchoAndReturn ("b");
public static string EchoAndReturn (string s)
{
Console.WriteLine (s);
return s;
}
}
利回り :
-------start-------
a
b
Hello
-------end-------
このコードの間:
void Main()
{
"-------start-------".Dump();
var test=Test.x;
"-------end-------".Dump();
}
収量
a
b
-------start-------
-------end-------
a
との順番b
が分かります。しかし、なぜ対処は と static method
は異なります static field
。
静的メソッドと静的フィールドで開始行と終了行が異なる場所にあるのはなぜですか? つまり、どちらの状況でも、彼はそれらのフィールドを初期化する必要があります...では、なぜですか?
(静的ctorを追加して同じにすることができることは知っていますが、この特定の状況について質問しています。)
(ps Dump() は console.write と同じです)