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

本文关键字:初始化 顺序 读字段 静态 | 更新日期: 2023-09-27 18:17:16

我很好奇c#规范中关于c# 5 (.net)中初始化静态字段的顺序的任何说明。例如:

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尚未被赋值。

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

谢谢。

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

这是它们出现的顺序。看到这里。

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

同样,当你有一个静态构造函数时:

如果类中存在静态构造函数(第10.11节),静态字段初始化项的执行会立即发生在执行静态构造函数。否则,静电场初始化函数在实现相关的时间执行该类静态字段的第一次使用