我在C#中有以下代码

class Test
{
  public static int X = Y;
  public static int Y = 3;
}

static void Main()
{
Console.WriteLine(Test.X);
Console.WriteLine(Test.Y);
}

在这种情况下,我得到0和3,但在以下情况下,我得到3,3
class Test
{
  public static int X = 3;
  public static int Y = X;
}

static void Main()
{
Console.WriteLine(Test.X);
Console.WriteLine(Test.Y);
}

为什么会这样呢?

最佳答案

根据规范,该规范说明了初始化静态字段的顺序。基本要点是它们按照声明的顺序进行初始化。

因此,在您的第一个代码段中,首先初始化X,然后初始化Y。由于Y尚未初始化,因此具有默认值0,因此X获得值0

在您的第二个代码段中,首先初始化X,但是给它明确的值3。然后,对Y进行初始化,并为其指定X的值,因为它首先被初始化,所以它是3

从§10.5.5.1起静态字段初始化

关于c# - C#中的静态字段初始化器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5019189/

10-17 00:03