考虑以下课程:
public class MyClass
{
public static string[] SomeAmazingConsts = { Const1 };
public static string Const1 = "Constant 1";
public static string Const2 = "Constant 2";
}
现在,查看用法:
class Program
{
static void Main(string[] args)
{
string[] s = MyClass.SomeAmazingConsts;
//s[0] == null
}
}
问题是s [0] == null!怎么会发生这种情况?现在,按如下方式重新排序MyClass的静态变量:
public class MyClass
{
public static string Const1 = "Constant 1";
public static string Const2 = "Constant 2";
public static string[] SomeAmazingConsts = { Const1 };
}
事情开始正常运作。任何人都可以对此有所了解吗?
答案 0 :(得分:13)
来自10.4.5.1 Static field initialization
类的静态字段变量初始值设定项对应于a 以文本顺序执行的分配顺序 它们出现在课堂宣言中。
因此,初始化从上到下进行,并且在第一种情况下Const1
尚未初始化,因此null