欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » C# » 正文

热门阅读

C#中Const与readonly定义的区别

创建时间:2012年08月09日 10:23  阅读次数:(9540)
分享到:
以前自己对Const与Readonly两者定义的区别不是很了解,今天在.net本质论(第一卷,公共语言运行库)中看到了这两者的区别,把里面的原话摘抄上来,希望能对大家有所帮助。

Const定义
有时需要一个对字段进行约束,让它成为常量值,也就是在它的生存期内不能被改变。CLR提供了两种将字段声明为常量值的方式。第一种方式所适用的字段,它的常量值是在编译时计算的——这是效率最高的:字面的静态值仅仅作为一个字面值存储在类型的元数据模块中,在运行时它并不是一个真正的字段。准确的说,编译器需要内联任何到字面字段的访问,从本质上讲,它是将字面值嵌入到指令流中。在C#中声明字面字段,必须使用const关键字。这还需要一个初始化表达式,使得它的值能够在编译时计算出来。下面是这个字段声明的例子:
Public sealed class Customer
{
Public const int Max_Customer_AGE=128*365;
}

任何试图修改这个字段的做法都将作为编译时错误被捕获。

Readonly定义
字面字段的初始化值在编译时必须是已知的。对于第二种方式,CLR允许程序员将字段声明为不变的(immutable),它将一个字段声明为initonly,并动态地初始化。如果将initonly特应用到一个字段,那么,一旦构造函数执行完毕,就不允许再对字段值修改。在C#中要指定个initonly字段,就必须使用readonly关键字。你可以通过使用初始化表达式来指定初始化值,或简单地在类型的构造函数方法中赋值。无论哪种情况,被使用的值都能顾及到程序执行状态的动态方面。下面是一个有关initonly字段的示范例子,它是用C#编写的:
Public sealed class Customer
{
Public readonly long created=System.DateTime.Now.Ticks;
}

注意,这段代码动态的生成了created字段的初始化值,它是基于当前时间的。也就是说,在新的实例构造函数执行完毕后,假如created的值被设置,就不能再改变它。

下面是网友对Const与Readonly区别的解释,总结的非常好:
1. const 字段只能在该字段的声明中初始化。 readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。
2. const 字段是编译时常数,而 readonly 字段可用于运行时常数。
3. const 默认就是静态的,而 readonly 如果设置成静态的就必须显示声明。
4.const 对于引用类型的常数,可能的值只能是 string 和 null。readonly可以是任何类型_剉貫刧 慅QpeegR薡S鍕{|媁剉貫
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论1条
  • #1楼  评论人:雨妙沙沙  评论时间:2014-5-9 14:50:44
  • 总结的非常好
发表评论:
留言人:
内  容:
请输入问题 13+35=? 的结果(结果是:48)
结  果: