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

本文关键字:怎么可能 静态成员 | 更新日期: 2023-09-27 17:57:10

考虑以下类:

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] == 空!这到底是怎么回事?现在,对 MyClass 的静态变量进行重新排序,如下所示:

public class MyClass
{
    public static string Const1 = "Constant 1";
    public static string Const2 = "Constant 2";
    public static string[] SomeAmazingConsts = { Const1 };
}

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

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

从 10.4.5.1 静态字段初始化

类的静态字段变量初始值设定项对应于 按文本顺序执行的赋值顺序 它们出现在类声明中。

因此,初始化从上到下发生,在第一种情况下Const1尚未初始化,因此null