静态变量声明的顺序

时间:2017-05-17 18:26:54

标签: c#

我有这两个代码:

private static int a = 5;
private static int b = a;

static void Main(string[] args)
{
    Console.WriteLine(b);
}

private static int b = a;
private static int a = 5;

static void Main(string[] args)
{
    Console.WriteLine(b);
}

请向我解释为什么在第一种情况下输出为5,但在第二种情况下输出为0

1 个答案:

答案 0 :(得分:9)

在第二种情况下,编译器将为类型生成以下静态构造函数:

static Program()
{
   // Note: this type is marked as 'beforefieldinit'.
   Program.b = Program.a;
   Program.a = 5;
}

因此,a在分配给0时等于b。然后a设置为5