静态变量顺序

时间:2013-03-13 14:57:35

标签: c# .net static-variables

我对C#

中的静态变量声明的顺序很不满意

当我运行此代码时:

static class Program {
  private static int v1 = 15;
  private static int v2 = v1;

  static void Main(string[] args) {
   Console.WriteLine("v2 = "+v2);
  }
}

输出结果为:

v2=15

但是当我像这样更改静态变量声明顺序时:

 static class Program {
      private static int v2 = v1;
      private static int v1 = 15;


      static void Main(string[] args) {
       Console.WriteLine("v2 = "+v2);
      }
    }

输出是:

v2 = 0

为什么会这样?

4 个答案:

答案 0 :(得分:10)

静态字段的初始化顺序与声明的顺序相同。使用v2的值初始化v1时,v1尚未初始化,因此其值为0.

答案 1 :(得分:4)

静态变量按其声明顺序初始化,因此当您在第二个示例中指定v2时,v1仍然具有其默认值0

我希望你知道,做这样的事情虽然是一个坏主意。

答案 2 :(得分:2)

静态变量获取值的方式意味着在第二个示例中,v1未初始化,因此在将其分配给v2时采用默认值0。

答案 3 :(得分:2)

static字段初始化了与其声明相同的顺序。

在您的第二个代码中,v1未初始化。由于v1Int32,因此它是值类型,所有值类型的默认值均为0

  

从第74页的Nutshell中的C#4.0开始。

     

静态字段初始值设定项按字段的顺序运行   声明。

在你的情况下;

private static int v2 = v1;
// v2 initialized 0 because of the default value of value types.
private static int v1 = 15;
// v1 initialized 15