我发现静态字段初始化可以表现不同。对于以下代码,
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
我检查了这两个版本生成的 IL 代码,几乎相同。
我想知道这是怎么发生的?如果是发布构建中的一种 JIT 优化,动机是什么?