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

时间:2014-08-10 16:25:15

标签: 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将具有值" hi",但如果我将DEFAULT的定义移到A和B之上,则会将其分配为NULL,因为A hasn& #39; t尚未分配。

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

感谢。

1 个答案:

答案 0 :(得分:7)

按照它们出现的顺序排列。请参阅here

  

类的静态字段变量初始值设定项对应于a   以文本顺序执行的分配顺序   它们出现在课堂宣言中。

此外,当你有一个静态构造函数时:

  

如果类中存在静态构造函数(第10.11节),   静态字段初始化程序的执行紧接在之前发生   执行该静态构造函数。否则,静态字段   初始化器在之前的实现相关时间执行   第一次使用该类的静态字段。