Chinaunix首页 | 论坛 | 博客
  • 博客访问: 310838
  • 博文数量: 169
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2520
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-12 22:00
文章分类

全部博文(169)

文章存档

2015年(4)

2014年(163)

2013年(2)

我的朋友

分类: Java

2014-09-11 17:37:39

 C#中const与readonly的区别


    的学员中很多都不清楚const与readonly的区别,所以在此广州传智.Net学院特此出文解惑const与readonly的区别

  在日常的编码实践中,我们都知道,对于常量,可以使用const和readonly,当然你可能也知道,一个是在编译时赋值,一个是在运行时赋值,但除了这个区别之外,还有一个更容易出错却不易发现的区别,你就未必知道了吧。

  const:const变量的值是在编译时,变量初始化时被设置的,在其他任何地方都无法改变它的值。如果放在类的字段前面,则该字段自动成为static静态字段,且不能static关键字。由于它的值是在编译时被设置,所以也被称为编译时常量。

  readonly:readonly关键字只能用于类的字段前,可以在声明时或类的构造函数两个地方进行赋值,而在其它地方则无法改变其值。由于它的值是在运行时设置的,所以也被称为运行时常量。

  除了上面的区别还有什么区别呢,下面让我来演示给你看。

  假设我有一个类库,里面只有一个类,类的文件名为SampleClass.cs,类中定义了两个整型字段,一个是const常量,一个是readonly常量,并且为其赋值:

  publicconstInt32ConstInteger=333;

  publicreadonlyInt32ReadOnlyInteger=666;

  然后,我们生成这个类库,将它引用到另一个项目中,并把它部署到客户机器上。现在由于客户的需求改变,我们需要将ConstInteger和ReadOnlyInteger两个字段的值分别改为444和777。改完之后,我们重新生成这个类库,并替换掉客户机器上的那个旧的类库文件。到了这里可能你觉得没什么特别的,但当我们去检查更新之后的结果时,令人差异的是ReadOnlyInteger这个字段的值已经变成了777,而ConstInteger这个字段的值却还是原来的333。

  这是为什么呢?

  原因是,如果含有const类型字段的项目作为程序集被其它项目所引用,那么当本项目重新编译时,引用它的那个项目也要重新编译,但如果是readonly就不用了,我想这可能就是它们一个被称为编译时常量,一个被称为运行时常量的原因吧。

  结论:由于了解了这些区别,所以大家在const与readonly的选择上会更有把握一些,希望这些文章对你有所帮助。
 
阅读(736) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~