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

时间:2009-09-29 20:25:48

标签: c# static-initializer

给出以下代码:

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

   private static Int32 myCharsSize = myChars.Length;
}

是否可以保证{<1}}在之前

3 个答案:

答案 0 :(得分:49)

是的,他们会,请参阅10.4.5.1 Static field initialization

  

静态字段变量初始值设定项   一个类对应于一个序列   在。中执行的作业   它们出现的文本顺序   类声明。 如果是静态的   构造函数(第10.11节)存在于   类,执行静态   字段初始化程序立即发生   在执行该静态之前   构造函数。否则,静止   字段初始值设定项在a处执行   依赖于实现的时间   第一次使用静态场   那个班。

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

答案 1 :(得分:13)

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


编辑:我接受(见better answer above)它会起作用;但我对代码的想法是让它尽可能简单明了。如果显而易见它会起作用(如果你不得不问,那就不行了),那就不要那样写了......

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

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

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

答案 2 :(得分:0)

乍一看,我不确定,我不得不试一试,看看它是否已编译。

鉴于此,我将在静态构造函数中初始化该值。