静态只读字段的初始化顺序

6
我想了解一下C#规范是否对C# 5(.net4)中静态字段的初始化顺序有任何规定。例如:
public class Test
{
   public static readonly string A = "hi";
   public static readonly string B = "bye";
   public static readonly string DEFAULT = A;
}

在测试中(Mono 2.x),它们似乎按照它们在代码中出现的顺序进行初始化。例如,如上所示,DEFAULT的值将为“hi”,但如果我将DEFAULT的定义移到A和B之前,它将被赋值为NULL,因为A还没有被赋值。
变量按顺序初始化有保证吗?还是由编译器决定?
谢谢。
1个回答

8

它们的顺序是按照它们在类中出现的顺序。请参阅此处

类的静态字段变量初始化器对应于一个分配序列,在类声明中按照文本顺序执行。

当您有一个静态构造函数时:

如果类中存在静态构造函数(第10.11节),则在执行该静态构造函数之前立即执行静态字段初始化器。否则,静态字段初始化器将在实现相关时间之前执行,以便首次使用该类的静态字段。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接