静态类中静态字段的初始化顺序
给出以下代码:
public static class Helpers { private static Char[] myChars = new Char[] {'a', 'b'}; private static Int32 myCharsSize = myChars.Length; }
是否保证myChars
将被初始化之前,我使用其长度分配给myCharsSize
?
是的,他们会请见10.4.5.1静态字段初始化 :
类的静态字段variables初始值设定项对应于按照它们出现在类声明中的文本顺序执行的赋值序列。 如果类中存在静态构造函数(第10.11节),则在执行静态构造函数之前立即执行静态字段初始化函数。 否则,在第一次使用该类的静态字段之前,静态字段初始化符在执行相关的时间执行。
这就是说,我认为这将是一个更好的静态types初始值设定项(静态构造函数)内进行初始化。
嗯…我很惊讶,编译(它确实,我检查)。 我不知道任何保证,这将使这个安全。 使用静态构造函数…
编辑:我接受(见上面更好的答案 ),它会工作; 但是我的代码思想是尽可能简单明了。 如果它不是显而易见的 (如果你不得不问),那么不要这样写…
特别是依靠现场秩序的问题:
- 它可以打破,如果你移动代码(我经常这样做)
- 如果将代码拆分为
partial
类,它可能会中断
我的build议仍然是:在这种情况下使用静态构造函数。
乍一看,我不能确定,我不得不尝试一下,看看它是否编译。
鉴于此,我将初始化静态构造函数中的值。