我在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/