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

来源:互联网 发布:美国女键盘手走红网络 编辑:程序博客网 时间:2024/06/05 10:59
参考资料:


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不是。




0 0
原创粉丝点击