为什么静态变量在C#中声明之前是可用的

时间:2016-12-11 14:31:43

标签: c# static-variables

我能够成功编译并运行以下程序:

class MyClass1
{
    public static int x = y;
    public static int y = 10;
}

static void Main(string[] args)
{
    Console.WriteLine(MyClass1.x); //prints 0
    Console.WriteLine(MyClass1.y); //prints 10
}

为什么要成功编译? x在声明和初始化之前如何获得y的值?如果是实例字段的情况,同样会得到编译时错误。

2 个答案:

答案 0 :(得分:3)

来自ECMA-334 - 17.4.5.1静态字段初始化

  

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

因此y变量在x变量的初始化行中使用,并使用默认值0初始化

答案 1 :(得分:0)

它们按顺序初始化。首先x设置为y的值,即0(默认值)。然后y设置为10.