我有这两个代码:
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
答案 0 :(得分:9)
在第二种情况下,编译器将为类型生成以下静态构造函数:
static Program()
{
// Note: this type is marked as 'beforefieldinit'.
Program.b = Program.a;
Program.a = 5;
}
因此,a
在分配给0
时等于b
。然后a
设置为5