对类的静态成员的奇怪行为 - 这怎么可能?

时间:2014-04-08 03:51:01

标签: c# c#-4.0 static-members static-classes

考虑以下课程:

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 };
}

事情开始正常运作。任何人都可以对此有所了解吗?

1 个答案:

答案 0 :(得分:13)

来自10.4.5.1 Static field initialization

  

类的静态字段变量初始值设定项对应于a   以文本顺序执行的分配顺序   它们出现在课堂宣言中。

因此,初始化从上到下进行,并且在第一种情况下Const1尚未初始化,因此null