关于readonly的理解——学习笔记

参考资料:


http://www.cnblogs.com/sujiantao/archive/2011/12/19/2289357.html

http://msdn.microsoft.com/zh-cn/library/acdd6hb7.aspx


如果一个字段添加了readonly修饰,那么这个字段的值只能在声明时赋值,或者在构造函数中赋值。

classSampleClass

{

publicint x;

publicreadonlyint y = 25;

publicreadonlyint z;

public SampleClass()

{

z = 24;

}

public SampleClass(int p1, int p2, int p3)

{

x = p1;

y = p2;

z = p3;

}

}


这种情况只针对如int,string这一些类型,对于int来说,修改相当于重新赋值。

而对于类,集合这些类型来说,即使是有readonly修饰,他们在之后的操作中也是可以修改的,只是不能进行重新赋值。

例如:对于class类型,可以修改其中的字段属性,对于集合,可以增加,删除元素。

微软示例和开源代码中用的一种开发扩展的方式就是使用静态的ReadOnly集合容器类,在其中包括默认的实现,然后允许用户在开发中进行添加或替换。

如MVC3中的 ModelBinderProviders,ViewEngines都是类似的实现。


readonly和const的差别

根据msdn中的说法:

readonly 关键字与 const 关键字不同。 const字段只能在该字段的声明中初始化。 readonly字段可以在声明或构造函数中初始化。 因此,根据所使用的构造函数,readonly 字段可能具有不同的值。另外,const 字段为编译时常数,而readonly 字段可用于运行时常数。


暂时简单的总结了几点:

1.const只用来修饰值类型,而readonly可以修饰引用类型。

2.const修饰的值需要在声明时赋值,而readonly则可以的构造中赋值。

3.const在编译是诗可被完全计算的,所以不会出现const int a = b+1;这样的声明,而readonly是在计算时执行的(用到时才确定值),可以添加一个运算来确定他的初始值。

如msdn中的列子:public static readonly uint timeStamp = (uint)DateTime.Now.Ticks;

4.const默认是静态的,而readonly不是。




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值