首页 / 软件开发 / C# / 比较C#中的readonly与const
比较C#中的readonly与const2011-03-25Kenny@WebC#中有两种常量类型,分别为readonly(运行时常量)与const(编译时常量),本文将就 这两种类型的不同特性进行比较并说明各自的适用场景。工作原理readonly为运行时常量,程序运行时进行赋值,赋值完成后便无法更改,因此也有人 称其为只读变量。const为编译时常量,程序编译时将对常量值进行解析,并将所有常量引用替换为相应 值。下面声明两个常量:public static readonly int A = 2; //A为运行时常量public const int B = 3; //B为编译时常量下面的表达式:int C = A + B;经过编译后与下面的形式等价:int C = A + 3;可以看到,其中的const常量B被替换成字面量3,而readonly常量A则保持引用方式。声明及初始化readonly常量只能声明为类字段,支持实例类型或静态类型,可以在声明的同时初始 化或者在构造函数中进行初始化,初始化完成后便无法更改。const常量除了可以声明为类字段之外,还可以声明为方法中的局部常量,默认为静态 类型(无需用static修饰,否则将导致编译错误),但必须在声明的同时完成初始化。数据类型支持由于const常量在编译时将被替换为字面量,使得其取值类型受到了一定限制。const 常量只能被赋予数字(整数、浮点数)、字符串以及枚举类型。下面的代码无法通过编译:public const DateTime D = DateTime.MinValue;改成readonly就可以正常编译:public readonly DateTime D = DateTime.MinValue;