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

C# 静态只读字段的初始化顺序,c#,static,C#,Static,我对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将具有值“

我对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尚未分配

是否保证变量按顺序初始化?还是由编译器决定


谢谢。

这是按它们出现的顺序排列的。看

类的静态字段变量初始值设定项对应于 按中的文本顺序执行的赋值序列 它们出现在类声明中

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

如果类中存在静态构造函数(第10.11节), 静态字段初始值设定项的执行发生在 执行静态构造函数。否则,静态场 初始值设定项在执行之前在依赖于实现的时间执行 该类静态字段的首次使用