问题描述
我正在阅读MSDN Documentation,但似乎存在矛盾。
在访问静态成员之前初始化静态成员 第一次并且在静态构造函数之前,如果有的话, 被称为。
也在下一段左右,
如果您的类包含静态字段,请提供静态构造函数 在类加载时初始化它们。
如果静态构造函数的目的是初始化类的静态成员,那么为什么它说静态成员在静态构造函数被调用之前就被初始化了?
是不是就像我写的:
public static int age = 10;
static SimpleClass()
{
age = 20;
}
这是否意味着年龄首先被初始化为 10,然后该值被覆盖为 20?
解决方法
第二个引用是一个建议:Microsoft 建议在声明时使用静态构造函数而不是初始化字段,以避免排序问题,尤其是在使用可能导致 null 异常的部分类时。
确实,通过使用部分类,不能保证字段的分配顺序。使用静态构造函数,它确实如此。
如果 getter 不访问未初始化的引用类型的实例,您还可以使用属性来确保不会出现 null 异常。
因此,由于第一个引用,您的问题的答案是:是的,这意味着年龄首先被初始化为 10,然后该值被覆盖为 20,除非您使用部分类,那么结果可能是危险的,它可能是与调试器的斗争......
您可以通过使用断点来检查和反转这一点。