C# - 在运行时初始化常量字段

标签 c# class static field constants

出于某种原因,我找不到这方面的文档。 看起来,在 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/

相关文章:

php - 是否有静态调用对象方法的设计模式

c# - .NET C# 中的参数化字符串

c# - 系统线程任务

c# - Elmah 中针对 Azure 函数的日志错误

c# - 无法打开 SQLite 数据库

c++ - 设置一个 2d char 空格数组

java - Android:静态变量和移动复杂数据

c++ - 静态初始化 C++

Python - 为什么它不创建对象的新实例?

class - 如何检查两个对象在 Kotlin 中是否具有相同的类?