静的フィールドの初期化の動作が異なる場合があることがわかりました。次のコードの場合、
public class Class1
{
public static void Main()
{
Console.WriteLine("Main");
Test();
Console.ReadLine();
}
public static void Test(){
Console.WriteLine("Test");
Singleton.Instance.DoSomething();
}
}
public class Singleton
{
private static Singleton sInstance = new Singleton();
protected Singleton()
{
Console.WriteLine("Singleton Constructor");
}
public static Singleton Instance
{
get
{
return sInstance;
}
}
public void DoSomething(){}
}
デバッグビルドでは、印刷されます
Main
Test
Singleton Constructor
リリースビルドでは、印刷されます
Main
Singleton Constructor
Test
これら 2 つのビルドで生成された IL コードを確認しましたが、ほとんど同じです。
これはどうやって起こるのだろうか?また、リリース ビルドでの一種の JIT 最適化である場合、その動機は何ですか?