C#中const 和 static readonly 区别
const
静态常量(Const)是指编译器在编译时候会对常量进行解析,并将常量的值替换成初始化的那个值
用 const 修饰符声明的成员叫常量,是在编译期初始化并嵌入到客户端程序
static readonly
动态常量(Readonly)的值则是在运行的那一刻才获得的,编译器编译期间将其标示为只读常量,而不用常量的值代替,这样动态常量不必在声明的时候就初始化,而可以延迟到构造函数中初始化。
用 static readonly 修饰符声明的成员依然是变量,只不过具有和常量类似的使用方法:通过类进行访问、初始化后不可以修改。但与常量不同的是这种变量是在运行期初始化
静态常量(Const)和动态常量(Readonly)之间的区别
|
|
静态常量(Compile-time Constant) |
动态常量(Runtime Constant) |
|
定义 |
声明的同时要设置常量值。 |
声明的时候可以不需要进行设置常量值,可以在类的构造函数中进行设置。 |
|
类型限制 |
只能修饰基元类型,枚举类型或者字符串类型。 |
没有限制,可以用它定义任何类型的常量。 |
|
对于类对象而言 |
对于所有类的对象而言,常量的值是一样的。 |
对于类的不同对象而言,常量的值可以是不一样的。 |
|
内存消耗 |
无。 |
要分配内存,保存常量实体。 |
|
综述 |
性能要略高,无内存开销,但是限制颇多,不灵活。 |
灵活,方便,但是性能略低,且有内存开销。 |
- 总结:
- Const修饰的常量在声明的时候必须初始化;Readonly修饰的常量则可以延迟到构造函数初始化 。
- Const常量既可以声明在类中也可以在函数体内,但是Static Readonly常量只能声明在类中。Const是静态常量,所以它本身就是Static的,因此不能手动再为Const增加一个Static修饰符。
- Const修饰的常量在编译期间就被解析,即:经过编译器编译后,我们都在代码中引用Const变量的地方会用Const变量所对应的实际值来代替; Readonly修饰的常量则延迟到运行的时候。
浙公网安备 33010602011771号