一句话:const是编译时常量,修饰的常量必须在声明时初始化;而readonly是运行时常量,可以选择在声明时初始化或者通过构造函数初始化。
以下是 C# 中 const 和 readonly 的区别对比,以表格形式展示:
| 区别点 | const | readonly |
|---|---|---|
| 定义对象 | 编译时常量(compile-time constant) | 运行时常量(runtime constant) |
| 赋值时间 | 必须在声明时赋值 | 可以在声明时赋值,也可以在构造函数中赋值 |
| 修改性 | 定义后不能修改 | 赋值后不能修改,赋值只能在初始化阶段 |
| 使用场景 | 适用于编译时已知的值 | 适用于运行时计算或依赖构造函数传递的值 |
| 数据类型限制 | 只能用于值类型或编译时已知的简单类型(如数字、字符串等) | 可以用于任何类型,包括引用类型 |
| 作用范围 | 隐式地是 static,只能用于类级别的常量 | 可以用于实例级别或静态级别字段 |
| 性能开销 | 因为是编译时常量,所以性能更优,编译时直接内联处理 | 运行时分配内存,有一定的性能开销,但支持更多复杂的类型 |
| 使用方式 | const int maxValue = 100; | readonly int maxValue; maxValue = 100; |
| 常见应用 | 数值常量、字符串常量、不可变的配置值 | 需要通过构造函数初始化的不可变字段,或依赖运行时数据的字段 |
希望这个表格能帮助你更好地理解 const 和 readonly 在 C# 中的不同应用场景和特性。