静态类中静态字段的初始化顺序

Ale*_*lex 44 c# static-initializer

给出以下代码:

public static class Helpers
{
   private static Char[] myChars = new Char[] {'a', 'b'};

   private static Int32 myCharsSize = myChars.Length;
}
Run Code Online (Sandbox Code Playgroud)

是否保证我使用其长度分配之前myChars将其初始化?myCharsSize

And*_*are 53

是的,他们会,请参见10.4.5.1静态字段初始化:

类的静态字段变量初始值设定项对应于以它们出现在类声明中的文本顺序执行的赋值序列.如果类中存在静态构造函数(第10.11节),则在执行该静态构造函数之前立即执行静态字段初始值设定项.否则,静态字段初始化器在第一次使用该类的静态字段之前的实现相关时间执行.

话虽如此,我认为在静态类型初始化器(静态构造函数)中进行初始化会更好.

  • 部分类呢? (4认同)
  • 要引用证据吗? (3认同)
  • @Sinjai,您可以检查同一文档的 15.3.1:“在这些情况下,在多个部分中声明的类型内的成员的顺序是未定义的。” (3认同)
  • 好多了;-p (2认同)

Mar*_*ell 14

嗯......我很惊讶编译(确实如此,我查了一下).我不知道任何可以保证安全的保证.使用静态构造函数...


编辑:我接受(见上面更好的答案)它会起作用; 但我对代码的想法是让它尽可能简单明了.如果不明显它会起作用(如果你不得不问,那就不行了),那就不要那样写了......

特别是依赖字段顺序的问题:

  • 如果你移动代码它会破坏(我经常这样做)
  • 如果将代码拆分为partial类,它可能会中断

我的建议仍然是:为这种情况使用静态构造函数.