-1

我正在阅读MSDN 文档,似乎存在矛盾。

在第一次访问静态成员之前以及在调用静态构造函数(如果有的话)之前初始化静态成员。

也在下一段左右,

如果您的类包含静态字段,请提供在加载类时初始化它们的静态构造函数。

如果静态构造函数的目的是初始化类的静态成员,那么它为什么说静态成员甚至在调用静态构造函数之前就已经初始化?

是不是像我这样写:

public  static int age = 10;

static SimpleClass()
{
 age = 20;
}

这是否意味着年龄首先被初始化为 10,然后该值被覆盖为 20?

4

1 回答 1

1

第二个引用是一个建议:微软建议在声明时使用静态构造函数而不是初始化字段,以避免排序问题,尤其是在使用部分类时,可能会导致空异常。

实际上,通过使用部分类,不能保证字段的分配顺序。使用静态构造函数,它确实如此。

如果 getter 不访问未初始化引用类型的实例,您还可以使用属性来确保不会出现空异常。

因此,由于第一个引用,您的问题的答案是:是的,这意味着 age 首先被初始化为 10 ,然后该值被覆盖为 20,除非您使用部分类,否则结果可能是危险的并且它可以和调试器对抗...

您可以通过玩断点来检查和调查这一点。

于 2021-01-24T17:31:50.023 回答