c中有两种常量类型分别为readonly与const本文_第1页
c中有两种常量类型分别为readonly与const本文_第2页
c中有两种常量类型分别为readonly与const本文_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、c 中有两种常量类型分别为 readonly( 运行时常量 )与 const( 编译时常量 )本文C#中有两种常量类型,分别为 readonly(运行时常量)与 const(编译时常量),本文将就这两种类型的不同特性进行比 较并说明各自的适用场景。工作原理readonly 为运行时常量,程序运行时进行赋值,赋值完成后便无法更改,因此 也有人称其为只读变量。 const 为编译时常量, 程序编译 时将对常量值进行解析,并将所有常量引用替换为相应值。 下面声明两个常量: public static readonly int A = 2; /A 为运行 时常量 public const int B

2、= 3; /B 为编译时常量 下面的表 达式:int C = A + B;经过编译后与下面的形式等价:int C= A + 3; 可以看到,其中的 const 常量 B 被替换成字面量 3,而 readonly 常量 A 则保持引用方式。声明及初始化 readonly 常量只能声明为类字段, 支持实例类型或静态类型, 可以在声明的同时初始化或者在构造函数中进行初始化,初 始化完成后便无法更改。 const 常量除了可以声明为类字 段之外,还可以声明为方法中的局部常量,默认为静态类型 (无需用 static 修饰, 否则将导致编译错误 ) ,但必须在声明的 同时完成初始化。数据类型支持由于 co

3、nst 常量在编译时将被替换为字面量,使得其取值类型受到了一定限制。const 常量只能被赋予数字 (整数、浮点数 ) 、字符串以及枚举 类型。下面的代码无法通过编译: public const DateTime D =DateTime.MinValue; 改成 readonly 就可以正常编译: public readonly DateTime D = DateTime.MinValue; 可维护性 readonly 以引用方式进行工作,某个常量更新后,所有引用 该常量的地方均能得到更新后的值。 const 的情况要稍稍 复杂些, 特别是跨程序集调用: public class Class1

4、 public static readonly int A = 2; /A 为运行时常量 public const int B = 3; /B 为编译时常量 public class Class2 public static int C = Class1.A + Class1.B; / 变量 C 的值为 A、 B 之 和 Console.WriteLine(Class2.C); / 输出 5 假设 Class1 与 Class2 位于两个不同的程序集, 现在更改 Class1 中的常量 值:public class Class1 public static readonly int A = 4

5、; /A 为运行时常量 public const int B = 5; /B 为编译时常量 编译 Class1 并部署(注意:这时并没有重新编译Class2),再次查看变量 C 的值: Console.WriteLine(Class2.C); / 输出 7 结果可能有点出乎意料, 让我们来仔细观察变量 C 的赋值表 达式: public static int C = Class1.A + Class1.B; 编译后与 下面的形式等价: public static int C = Class1.A + 3; 因此 不管常量 B 的值如何变,对最终结果都不会产生影响。虽说 重新编译 Class2

6、即可解决这个问题,但至少让我们看到了 const 可能带来的维护问题。 性能比较 const 直接以字面量形式参与运算,性能要略高于readonly,但对于一般应用 而言,这种性能上的差别可以说是微乎其微。适用场景在下面两种情况下:a.取值永久不变(比如圆周率、一天包含的小时数、地球的半径等)b.对程序性能要求非常苛刻 可以使用 const 常量,除此之外的其他情况都应该优 先采用 readonly 常量。 总结 :Readonly 是运行时常量, Const 是编译时常量;前者灵活,后者高效;前者可以用于任何类 型,后者只能用于数字和字符串;从上面的对比看来,const 相对于 readonly 的唯一好处就是它的高效性; 但是,到 底能高多少?我们用 C#这样的高级语言来写应用程序,远不会像用 C 写操作系统

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论