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常量。