EffectiveC#2--为你的常量选择readonly而不是const
2015-10-05 20:00
253 查看
1.对于常量,C#里有两个不同的版本:
编译时常量--效率相比更高些,但可维护性不好,保留的目的是为了性能。const关键字申明
public const int _Millennium = 2000;
运行时常量--效率稍低些,可维护性好。readonlyc关键字声明,也叫只读变量。
public static readonly int _ThisYear = 2007
2.两者的区别;
编译时常量只能是基本类型,枚举或者是字符串。编译时常量会被目标代码中的值直接取代
运行时常量可以是任何类型的数据。运行时常量动态取值(动态指运行时确定值)。
注意:运行时常量可以在定义变量时设定值或在构造函数中初始化,其他地方不可以再修改。
举例:private const DateTime _classCreation = new DateTime(2000,1,1,0,0,0); //ERROR 值编译时不确定
private readonly DateTime _classCreation = new DateTime(2000,1,1,0,0,0);//PASS
另外:运行时常量可以是一个类的实例成员,也可以是一个类型的静态成员,而编译时常量只能是静态成员
3.对可维护性的解释
例子:一个类库中定义一个编译时常量,类库被客户端引用,当类库中常量值需更改时,客户端需要重新编译,否则取出的
值有问题,而对于运行时常量不存在这样的问题。
4. const应该用于定义一个值且该值不能在不同的版本发布时发生改变的常量
编译时常量--效率相比更高些,但可维护性不好,保留的目的是为了性能。const关键字申明
public const int _Millennium = 2000;
运行时常量--效率稍低些,可维护性好。readonlyc关键字声明,也叫只读变量。
public static readonly int _ThisYear = 2007
2.两者的区别;
编译时常量只能是基本类型,枚举或者是字符串。编译时常量会被目标代码中的值直接取代
运行时常量可以是任何类型的数据。运行时常量动态取值(动态指运行时确定值)。
注意:运行时常量可以在定义变量时设定值或在构造函数中初始化,其他地方不可以再修改。
举例:private const DateTime _classCreation = new DateTime(2000,1,1,0,0,0); //ERROR 值编译时不确定
private readonly DateTime _classCreation = new DateTime(2000,1,1,0,0,0);//PASS
另外:运行时常量可以是一个类的实例成员,也可以是一个类型的静态成员,而编译时常量只能是静态成员
3.对可维护性的解释
例子:一个类库中定义一个编译时常量,类库被客户端引用,当类库中常量值需更改时,客户端需要重新编译,否则取出的
值有问题,而对于运行时常量不存在这样的问题。
4. const应该用于定义一个值且该值不能在不同的版本发布时发生改变的常量
相关文章推荐
- HTML5移动Web开发(五)——移动设计之CSS媒介查询
- HTML5移动Web开发(四)——移动设计
- EffectiveC#1--尽可能的使用属性(property),而不是数据成员(field)
- js中style.display=""无效的解决方法
- JavaScript闭包
- 开发人员常用的10个JavaScript库
- Javascript的异常处理介绍
- JS模拟点击的那些事儿
- JavaScript网页脚本性能优化
- 2015-09-28认识js1
- secondarynamenode配置使用总结
- 全屏轮播插件fullpage.js的使用
- bootstrap日期选择器-datetimepicker
- leetcode 237 : Delete Node in a Linked List
- css-样式重构-代码分享
- 比较幸运的收到了两份offer
- 测试自定义随笔样式
- Gson解析(6)——注册TypeAdapter及处理Enum类型
- Gson解析(5)——实际开发中的特殊需求处理
- Gson解析(4)——Map处理数据(下)