让我们有两个代码段:
答
public class Foo
{
private static Bar _unused = new Bar();
}
B:
public class Foo
{
private static Bar _unused;
static Foo()
{
_unused = new Bar();
}
}
如果 A ,CLR甚至不会调用Bar ctor(除非它是调试版本或附加了调试器),但是如果 B 它被调用所有情况。
问题是,在Bar构造函数中,可以有一个调用来使这个实例可以从其他地方访问 - 最典型的是事件订阅。
所以:
答案 0 :(得分:7)
如果你don't create a constructor:
类的静态字段变量初始值设定项对应于按照它们出现在类声明中的文本顺序执行的赋值序列。如果类中存在静态构造函数(第10.11节),则在执行该静态构造函数之前立即执行静态字段初始值设定项。否则,静态字段初始值设定项在首次使用该类的静态字段之前的实现相关时间执行。
如果你do have a static constructor:
静态构造函数用于初始化任何静态数据,或执行仅需要执行一次的特定操作。在创建第一个实例或引用任何静态成员之前,它会自动调用。