常量 (C# 编程指南)

常量是编译时已知的不可变值,并且不会更改程序生命周期。 常量使用 量修饰符声明。 只能将 C# 内置类型 声明为 const. 除了String之外,引用类型常量只能使用null值进行初始化。 用户定义的类型(包括类、结构和数组)不能是const。 使用 readonly 修饰符创建在运行时一次性(例如在构造函数中)初始化的类、结构或数组,此后不能更改。

C# 不支持 const 方法、属性或事件。

枚举类型使你可以为整型内置类型定义命名常量(例如intuintlong等等)。 有关详细信息,请参阅 枚举

必须在声明常量时初始化常量。 例如:

class Calendar1
{
    public const int Months = 12;
}

在此示例中,常量始终为 12,即使类本身也无法更改该常量 Months 。 事实上,当编译器在 C# 源代码(例如,)中遇到常量标识符时, Months它将文本值直接替换为它生成的中间语言(IL)代码。 由于运行时没有与常量关联的变量地址, const 因此不能通过引用传递字段,并且不能在表达式中显示为 l 值。

注释

引用在其他代码(如 DLL)中定义的常量值时,请谨慎使用。 如果新版本的 DLL 为常量定义了新值,则程序仍将保留旧文本值,直到针对新版本重新编译它。

可以同时声明同一类型的多个常量,例如:

class Calendar2
{
    public const int Months = 12, Weeks = 52, Days = 365;
}

用于初始化常量的表达式可以引用另一个常量(如果未创建循环引用)。 例如:

class Calendar3
{
    public const int Months = 12;
    public const int Weeks = 52;
    public const int Days = 365;

    public const double DaysPerWeek = (double) Days / (double) Weeks;
    public const double DaysPerMonth = (double) Days / (double) Months;
}

常量可以标记为 公共专用受保护内部受保护的内部专用保护。 这些访问修饰符定义类的用户如何访问常量。 有关详细信息,请参阅访问修饰符

访问常量就像是 静态 字段一样,因为常量的值对于类型的所有实例都是相同的。 不使用 static 关键字声明它们。 不在定义常量的类中的表达式必须使用类名、句点和常量的名称来访问常量。 例如:

int birthstones = Calendar.Months;

C# 语言规范

有关详细信息,请参阅 C# 语言规范。 语言规范是 C# 语法和用法的明确来源。

另请参阅