在C#中const与static readonly很像,在程序中都为只读,并且一旦初始化就不可更改。两者在大多数情况下可以混用,两者的一些区别列举如下:
对于const:
- 在编译期间解析的常量
- 必须在声明时就初始化
- 既可以用来修饰类中的成员,也可以用来修饰函数体内的局部变量
对于static readonly:
- 在运行期间解析的常量
- 既可以在声明时初始化,也可以在构造器中初始化
- 只可以用于修饰类中的成员
const被称为静态常量(compile-time constants),而static readonly被称为动态常量(runtime constants),他们有不同的特性,错误的使用可能损失效率,还可能造成错误。相比之下,静态常量在速度上会稍快一些,但是灵活性却比动态常量差很多。两者的区别如下:
静态常量:
- 无内存消耗
- 只能初始化为很少的简单类型,不能new,必须在声明时同时赋值
- 在编译时替换
动态常量:
- 因为要保存常量,所以有内存消耗
- 可以初始化为任意类型,可以在构造函数中赋值
- 相当于类中的数据成员
参考资料:欧立奇《.net程序员面试宝典》