今天我与同事讨论并得出以下几点。如果一切正确或需要进行一些修改,请注意点亮。
答案 0 :(得分:10)
1.-3。你无法确切知道它何时发生,所以你不能依赖它。静态构造函数可以让你稍微控制调用它时会发生什么。
public class UtilityClass
{
//
// Resources
//
// r1 will be initialized by the static constructor
static Resource1 r1 = null;
// r2 will be initialized first, as static constructors are
// invoked after the static variables are initialized
static Resource2 r2 = new Resource2();
static UtilityClass()
{
r1 = new Resource1();
}
static void f1(){}
static void f2(){}
}
4.静态构造函数很慢
静态构造函数执行的确切时间取决于实现,但遵循以下规则:
答案 1 :(得分:4)
你的所有观点都是正确的。
应避免使用静态构造函数的原因是因为编译器会在调用类的任何方法的任何地方注入代码,以检查是否已调用静态构造函数。这会对性能产生负面影响。
你可以做的是在你的类中有一个私有静态字段,当调用默认(或其他非静态)构造函数时,该字段被赋予一个虚拟值。这将初始化对象创建时的所有静态字段。