C# 中,const 表示常量,readonly 表示只读域
const 与 readonly 本质的区别是,const 是编译时常量,readonly 是运行时常量。
编译时常量,就是在编译时就需要确定的;而运行时常量是在运行时确定的。- const 效率略高于 readonly。
- const 只用于数字和字符串;readonly 用于任何类型。
- const 用于全局变量、局部变量或 class 的 field;readonly 只用于 class 的 field,比如函数中就不能用 readonly,这就示上述示例中 readonly 为什么要放在 class 中的原因了。相关阅读:谈谈 const 与 readonly 的赋值。
- const 修饰的 class 的 field,为该类的所有实例共享;readonly 修饰的 class 的 field,为该类的某一个实例独享,除非我们加了 static。
- 有些地方只能用 const。
- 有些地方只能用 readonly。
- 确定的值用 const,比如圆周率,再比如设计的系统中用 1 表示 OK。
- 不确定但要求不允许更改的值用 readonly,这取决于实际应用,比如用户管理系统中不允许更改工号,那么工号就可以考虑用 readonly,因为在编译的时候,无法确定是哪个员工的工号。
- const 必须在声明时赋值,即必须初始化;而 readonly 在声明时不赋值也不报错。
- const 一旦赋值在任何地方都不能再修改其值;而 readonly 可以在类构造函数中再次修改。最后请记住:const 表示常量,readonly 表示只读域。