我们有两个代码片段:
:
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函数(除非是调试构建或附加了调试器),但是在B情况下它在所有情况下都被调用。
问题是,在Bar构造函数中,可以调用使该实例从其他地方可访问-最典型的是事件订阅。
:
- 为什么情况A和B评价不同?
- 为什么CLR在A的情况下根本不调用Bar函数不应该将其评估为垃圾,直到tor完成和实例分配到适当的领域?
如果不创建构造函数:
类的静态字段变量初始化项对应于一系列赋值,这些赋值按照它们在类声明中出现的文本顺序执行。如果类中存在静态构造函数(第10.11节),则在执行静态构造函数之前立即执行静态字段初始化式。否则,静态字段初始化器在该类的静态字段首次使用之前,在与实现相关的时间执行。
如果你有一个静态构造函数:
静态构造函数用于初始化任何静态数据,或用于执行只需要执行一次的特定操作。在创建第一个实例或引用任何静态成员之前,自动调用。