常量(C# 编程指南)
常量是不可变的值,在编译时是已知的,在程序的生命周期内不会改变。 常量使用 const 修饰符声明。 只有 C# 内置类型可声明为 const
。 除 String 以外的引用类型常量只能使用 null 值进行初始化。 用户定义的类型(包括类、结构和数组)不能为 const
。 使用 readonly 修饰符创建在运行时一次性(例如在构造函数中)初始化的类、结构或数组,此后不能更改。
C# 不支持 const
方法、属性或事件。
枚举类型使你能够为整数内置类型定义命名常量(例如 int
、uint
、long
等)。 有关详细信息,请参阅枚举。
常量在声明时必须初始化。 例如:
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;
}
可以将常量标记为public、private、protected、internal、protected internal 或 private protected。 这些访问修饰符定义该类的用户访问该常量的方式。 有关详细信息,请参阅访问修饰符。
常量是作为静态字段访问的,因为常量的值对于该类型的所有实例都是相同的。 不使用 static
关键字来声明这些常量。 不在定义常量的类中的表达式必须使用类名、句点和常量名称来访问该常量。 例如:
int birthstones = Calendar.Months;
C# 语言规范
有关详细信息,请参阅 C# 语言规范。 该语言规范是 C# 语法和用法的权威资料。