const 关键字
使用 const
关键字声明常量字段或本地常量。 常量字段和局部变量不是变量,不能修改。 常量可以是数字、布尔值、字符串或 null 引用。 不要创建一个常量来表示你期望随时更改的信息。 例如,不要使用常量字段来存储服务的价格、产品版本号或公司的品牌名称。 这些值可能会随时间而变化,由于编译器传播常量,使用库编译的其他代码必须重新编译才能查看更改。 另请参阅 readonly 关键字。 例如:
const int X = 0;
public const double GravitationalConstant = 6.673e-11;
private const string ProductName = "Visual C#";
内插字符串 可以是常量,如果使用的所有表达式也是常量字符串。 此功能可以改进生成常量字符串的代码:
const string Language = "C#";
const string Platform = ".NET";
const string FullProductName = $"{Platform} - Language: {Language}";
言论
常量声明的类型指定声明引入的成员的类型。 本地常量或常量字段的初始值设定项必须是可隐式转换为目标类型的常量表达式。
常量表达式是在编译时可以完全计算的表达式。 因此,引用类型的常量的唯一可能值为字符串和 null 引用。
常量声明可以声明多个常量,例如:
public const double X = 1.0, Y = 2.0, Z = 3.0;
常量声明中不允许 static
修饰符。
常量可以参与常量表达式,如下所示:
public const int C1 = 5;
public const int C2 = C1 + 100;
注意
readonly 关键字与 const
关键字不同。 一个 const
字段只能在字段声明时进行初始化。 可以在声明或构造函数中初始化 readonly
字段。 因此,readonly
字段可以具有不同的值,具体取决于使用的构造函数。 此外,尽管 const
字段是编译时常量,但 readonly
字段可用于运行时常量,如以下行所示:public static readonly uint l1 = (uint)DateTime.Now.Ticks;
例子
public class ConstTest
{
class SampleClass
{
public int x;
public int y;
public const int C1 = 5;
public const int C2 = C1 + 5;
public SampleClass(int p1, int p2)
{
x = p1;
y = p2;
}
}
static void Main()
{
var mC = new SampleClass(11, 22);
Console.WriteLine($"x = {mC.x}, y = {mC.y}");
Console.WriteLine($"C1 = {SampleClass.C1}, C2 = {SampleClass.C2}");
}
}
/* Output
x = 11, y = 22
C1 = 5, C2 = 10
*/
以下示例演示如何声明本地常量:
public class SealedTest
{
static void Main()
{
const int C = 707;
Console.WriteLine($"My local constant = {C}");
}
}
// Output: My local constant = 707
C# 语言规范
有关详细信息,请参阅 C# 语言规范的以下部分: