常量(C# 编程指南)

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

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

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

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

class Calendar1
{
    public const int Months = 12;
}

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

注意

引用其他代码(如 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;
}

可以将常量标记为publicprivateprotectedinternalprotected internalprivate protected。 这些访问修饰符定义该类的用户访问该常量的方式。 有关详细信息,请参阅访问修饰符

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

int birthstones = Calendar.Months;

C# 语言规范

有关详细信息,请参阅 C# 语言规范。 该语言规范是 C# 语法和用法的权威资料。

另请参阅