C#常量————const和readonly
1.定义:
相同:2者都是来定义常量、只读的。
不相同:const为编译时常量,即在编译时便用该常量的值代替常量变量。
readonly为运行时常量,即在运行时返回一个运行时常量的变量引用。
2.实例分析:
(1)public class Limitation
{
public static readonly int startValue =5;
public const int endValue=10;
}
注意:对于readonly修饰的运行是常量,只能在初始化时赋值,或者是构造函数中赋值。而不能在其他地方赋值。
(2)public static readonly int A=2;
public const int B=3;
表达式为:int C=A+B;
当编译后则会变成下面的形式等价:int C=A+3;
3.区别:
(1)声明以及初始化
readonly----声明为类字段,在声明的同时进行初始化或者在构造函数中进行初始化,初始化完成后便无法更改。
const----除了可以声明类字段,也可以声明为方法中的局部变量。默认为静态类型(无需用static修饰),但必须在声明的同时完成初始化。
(2)数据类型支持
由于const常量在编译时将被替换为字面量,使得其取值类型受到了一定限制。const常量只能被赋予数字(整数、浮点数)、字符串以及枚举类型。
(3)可维护性
readonly以引用方式进行工作,某个常量更新后,所有引用该常量的地方均能得到更新后的值。
const的情况要稍稍复杂些,特别是跨程序集调用。
4.适用场景 :
在下面两种情况下:
a.取值永久不变(比如圆周率、一天包含的小时数、地球的半径等)
b.对程序性能要求非常苛刻
可以使用const常量,除此之外的其他情况都应该优先采用readonly常量。