浅析C#中的const与readonly异同.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
以前只是用const与readonly声明常量,今天在网上看了它们的一些其它属性,觉得有必要弄清楚它们的用法与异同,所以动手找了找,也写了几行代码以呈现,还望大家给予指点。 先贴代码。 定义一个简单类,声明两个公开变量,_const,_readonly. ????public?class?ConstReadonly ????{ ????????public?const?string?_const; ????????public?readonly?string?_readonly; ????} ? 此时会编译会出现错误: 错误?1?常量字段要求提供一个值?(在_const行)。则表明,const变量在声明是就要赋值,而readonly则不一定。 那好,我们就对这两个变量赋值 ? ? ????public?class?ConstReadonly ????{ ????????public?const?string?_const?=?const; ????????public?readonly?string?_readonly; ????} 然后,在程序中调用此两个变量, ? ????class?Program ????{ ????????static?void?Main(string[]?args) ????????{ ????????????ConstReadonly?cr?=?new?ConstReadonly(); ????????????Console.WriteLine(cr._readonly); ????????????Console.WriteLine(cr._const); ????????} ????} ? 此时,编译不通过,查看错误 无法使用实例引用访问静态成员“ConstReadonly._const”;改用类型名来限定它。 原来const声明的变量,其为static变量,而readonly则不是。 把cr._const更改为:ConstReadonly._const。 ? ????class?Program ????{ ????????static?void?Main(string[]?args) ????????{ ????????????ConstReadonly?cr?=?new?ConstReadonly(); ????????????Console.WriteLine(cr._readonly); ????????????Console.WriteLine(ConstReadonly._const);//_const为静态变量 ????????} ????} 编译通过,输出结果为: const 可见,可能不用给_readonly赋初始值。当然,这只是可不可以的讨论,至于实际编程中,要自己把握了。此处,本人查的资料显示为,const编译时赋值,如果没有赋值,则编译不通过;readonly则是在程序运行时赋值,那么它可以同.NET自己值初始null。 下面看一看,给他们赋值变量会出现什么问题。 ? ????public?class?ConstReadonly ????{ ????????public?string?_str?=?str; ????????public?const?string?_const?=?_str; ????????public?readonly?string?_readonly?=?_str; ????} 编译,出现错误: 错误?1?非静态的字段、方法或属性“ConstReadonly._str”要求对象引。 其实,从前面就可以了解到,既然const是静态类型,则只能使用静态字段,方法,属性赋值。此处的ConstReadonly._str则不是静态的。 错误?2?“ConstReadonly._const”的类型为“string”。只能用 null 对引用类型(字符串除外)的常量进行初始化? 不说此处,先看下面。 更改之后,? ????public?class?ConstReadonly ????{ ????????public?string?_str?=?str; ????????public?static?string?_sstr=sstr; ????????public?const?string?_const?=?const; ????????public?readonly?string?_readonly?=?_str; ????} ? 编译,又出现错误: 错误?1?字段初始值设定项无法引用非静态字段、方法或属性。 看来readonly也要引用静态的字段,方法或属性。 但是,它没有上面的错误2 在这里,我们可以想一下,const常量是编译时赋值,readonly是运行

文档评论(0)

xuefei111 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档