关于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不是。
- 关于readonly的理解——学习笔记
- 关于linux里pg command 命令的简单理解——学习笔记
- 关于NB算法的一些学习笔记——朴素贝叶斯算法理解
- C语言学习笔记——关于 .obj 文件的理解
- C# 关于readonly的使用说明
- 关于闭包的浅薄理解——笔记
- 今日学习笔记 关于S3C2440时钟设置的理解
- 关于Egret的学习笔记与理解之一
- 学习笔记第一天,关于div+css的理解
- javaweb学习笔记之关于分层结构的初步理解
- redis学习笔记-关于redis服务器的理解
- 深度学习系列——关于神经网络理解的总结
- 关于捷联惯导解算的理解笔记
- C#学习笔记一——对.netFramework的理解
- java学习笔记——synchronized的理解(仅供参考)
- Java学习笔记——多态的理解
- spring学习笔记(2)——IOC的理解
- C++学习笔记——&和*的初步理解
- Python实现日志记录功能--样例
- HDU 3579 Hello Kiki 中国剩余定理 不互质情况
- SecureCRT 使用技巧
- hadoop-hive-hive多个实例
- STL之双端队列
- 关于readonly的理解——学习笔记
- oracle connect by 官方文档翻译
- 4.4.2.1 创建随机颜色的画笔
- 软件测试流程
- android中各个度量单位的解释,分享给大家
- C#中,将一个DataTable转为List
- linux sed
- 深入理解SELinux/SEAndroid
- 行为型模式--状态模式