C# - 在运行时是初始化的const字段

Min*_*s97 1 c# static field const class

出于某种原因,我没有找到关于此的文档.看起来,在C#中,类的const字段在静态字段之前被初始化,因为从这段代码可以看出:

class Program {
    static int p = f;
    const int f = 10;

    static void Main(string[] args){
        System.Console.WriteLine("{0}", p);
        System.Console.ReadLine();
    }
}
Run Code Online (Sandbox Code Playgroud)

(这个输出10,而如果我更换conststatic时,其输出0).

问题是:这种行为总是如此吗?另外,通常,不同类型的静态类字段的初始化顺序是什么?

Guf*_*ffa 5

常量根本没有初始化,它们是在编译时替换的常量值.当代码运行时,就像它最初一样:

static int p = 10;
Run Code Online (Sandbox Code Playgroud)

此编译时替换的副作用是,在一个程序集中存在并在不同程序集中使用的常量需要在更改常量时重新编译这两个程序集.