即使在调用静态构造函数之前,类的静态成员也会被初始化吗?

问题描述

我正在阅读MSDN Documentation,但似乎存在矛盾。

在访问静态成员之前初始化静态成员 第一次并且在静态构造函数之前,如果有的话, 被称为。

也在下一段左右,

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

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

是不是就像我写的:

public  static int age = 10;

static SimpleClass()
{
 age = 20;
}

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

解决方法

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

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

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

因此,由于第一个引用,您的问题的答案是:是的,这意味着年龄首先被初始化为 10,然后该值被覆盖为 20,除非您使用部分类,那么结果可能是危险的,它可能是与调试器的斗争......

您可以通过使用断点来检查和反转这一点。