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

时间:2014-10-25 18:31:53

标签: c# class static field const

出于某种原因,我未能找到相关文档。 看起来,在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();
    }
}

(这会输出10,而如果我将const替换为static,则会输出0

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

2 个答案:

答案 0 :(得分:5)

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

static int p = 10;

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

答案 1 :(得分:4)

const声明一个在 compile 时确定的值。在编译的代码中,它看起来只是一个文字,而不是对某些命名标识符的引用。所以,是的...... const成员总是在任何其他成员之前被“初始化”,因为它们被“初始化”了。

以下是对您更广泛问题的合理完整答案:What is the static variable initialization order in C#?

以下是一些指向文档的链接:

10.4.5.1 Static field initialization

10.4.5.2 Instance field initialization