C# 常量(const)详解
本文章会站在专业开发工程师的角度,对 C# 中的常量(Constants) 进行全面、详细、权威可靠的阐述,涵盖:基本语法、使用场景、限制、与 readonly 的区别、最佳实践等内容,并提供权威链接(如微软官方文档)。
一、什么是常量?
在 C# 中,常量是在编译时其值就已经确定、并且无法被修改的变量。一旦定义,就不能更改。
使用关键字:const
二、基本语法
const 数据类型 常量名 = 值;
示例:
const int DaysInWeek = 7;
const string CompanyName = "OpenAI";
const double Pi = 3.14159;
三、常量的特性
| 特性 | 说明 |
|---|---|
| 编译时确定 | 常量的值必须在编译期间已知,不能运行时动态赋值 |
| 只能是基本类型 | const 只能用于 C# 的内置数据类型(int、double、string、char、bool 等) |
隐式为 static | 常量是类级别的成员,不需要实例化类就可以访问 |
| 不可更改 | 定义后无法赋新值 |
可用于 switch case、数组大小等编译时常量需求处 |
四、适合用常量的场景
- 全局不变的值,如:
- 一年中的月份数
- 固定的数据库连接字符串前缀
- 版本号信息
- 状态码、权限码
五、与 readonly 的区别(面试常考)
| 对比项 | const | readonly |
|---|---|---|
| 值设定时机 | 编译时 | 运行时(构造函数中) |
| 可支持类型 | 仅编译期常量类型 | 任意类型(包括类、结构体、对象) |
| 是否隐式 static | 是 | 否(可选择) |
| 可否在构造函数赋值 | 否 | 可以 |
| 使用场景 | 固定不变,如π | 初始化后不变,如启动时间戳 |
示例:
public class Example {
public const double Pi = 3.14159; // 编译时常量
public readonly DateTime StartTime;
public Example() {
StartTime = DateTime.Now; // 运行时常量,只能赋值一次
}
}
六、注意事项
- 不能用于复杂对象:
// 错误
const DateTime myTime = DateTime.Now;
使用 readonly 替代。
- 类级别访问:
public class MyClass {
public const string AppName = "MyApp";
}
Console.WriteLine(MyClass.AppName); // OK
七、结合枚举使用常量(高级场景)
虽然可以用 const 定义状态码,但使用 enum 更具可读性:
public enum StatusCode {
Success = 200,
NotFound = 404,
ServerError = 500
}
八、C# 常量相关的官方文档链接
九、推荐实践
- 对于编译时固定值,始终优先使用
const - 若需初始化复杂数据或依赖运行时计算,使用
readonly - 不要在 API 或公共接口中暴露
const,以防二进制兼容性问题(值会被内联) - 常量名建议使用 PascalCase(如
MaxValue),遵循 C# 命名规范
十、附加技巧:常量数组的替代方法
C# 不支持 const string[],可用 readonly 配合 static 替代:
public static class Constants {
public static readonly string[] AllowedExtensions = new[] { ".jpg", ".png", ".gif" };
}
更多详细内容,请关注其他相关文章!