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的选择上会更有把握一些,希望这些文章对你有所帮助。
阅读(615) | 评论(0) | 转发(0) |