3 回答
TA贡献1900条经验 获得超5个赞
C#规范中涉及大约四个不同的规则,以确保此保证,并且特定于C#。.NET运行时唯一的保证是类型初始化在使用类型之前就开始了。
在类型初始化程序运行之前,将静态字段初始化为零。
静态字段初始化程序在静态构造函数之前立即运行。
在第一个实例构造函数调用或第一个静态成员引用处将调用静态构造函数。
该函数参数按从左到右的顺序求值。
依赖于此是一个非常糟糕的主意,因为它可能会使任何人都无法阅读您的代码,特别是如果他们熟悉使用类似语法的语言,而这并不能保证以上所有这四个条件。
请注意,Porges的评论与我的最初声明(基于.NET行为)有关,后者的保证太弱,无法确保观察到的行为。波尔格斯说保证足够强大是正确的,但实际上涉及的链要比他建议的复杂得多。
TA贡献1789条经验 获得超10个赞
您可能想知道,甚至有可能在默认初始化和变量初始化之间为字段分配值。
private static int b = Foo();
private static int a = 4;
private static int Foo()
{
Console.WriteLine("{0} - Default initialization", a);
a = 3;
Console.WriteLine("{0} - Assignment", a);
return 0;
}
public static void Main()
{
Console.WriteLine("{0} - Variable initialization", a);
}
输出
0 - Default initialization
3 - Assignment
4 - Variable initialization
- 3 回答
- 0 关注
- 628 浏览
添加回答
举报