出于某种原因,我找不到这方面的文档。 看起来,在 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
,而如果我用 static
替换 const
,它会输出 0
)。
问题是: 这种行为总是如此吗? 另外,一般情况下,不同类型的静态类字段的初始化顺序是什么?
最佳答案
常量根本没有初始化,它们是在编译时替换的常量值。当代码运行时,就好像它原来是这样的:
static int p = 10;
这种编译时替换的副作用是,如果您更改常量,存在于一个程序集中并在不同程序集中使用的常量需要重新编译两个程序集。
关于C# - 在运行时初始化常量字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26565796/