【问题标题】:Initialization order of static readonly field [duplicate]静态只读字段的初始化顺序[重复]
【发布时间】:2014-10-03 12:51:58
【问题描述】:

我很好奇 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。

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

谢谢。

【问题讨论】:

    标签: c# static


    【解决方案1】:

    按照它们出现的顺序。见here

    类的静态字段变量初始化器对应于 以文本顺序执行的任务序列 它们出现在类声明中。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-15
      • 1970-01-01
      • 2010-12-02
      • 1970-01-01
      • 1970-01-01
      • 2017-05-31
      • 2013-10-29
      • 1970-01-01
      相关资源
      最近更新 更多