创建常量时尽可能使用readonly,而不是const
来源:互联网 发布:淘宝新品破冰 编辑:程序博客网 时间:2024/05/16 07:38
const float _pi = 3.1415926;
readonly float _r = 20.23;
Const常量是编译时常量,也就是说当CLR编译器将const常量编译成中间语言IL(Intermediate Language )语言时,IL直接用const常量的值来替代了程序中对该常量的引用。
编译时常量的优缺点:
优点:效率高
缺点:可扩展性差,不灵活
Readonly常量是运行时常量。运行时常量的值是在运行时确定的。当你引用一个readonly常量时IL会为你引用一个运行时常量的变量,而不是直接使用该常量的值。
运行时常量的优缺点:
优点:可扩展性好;
缺点:效率比较低。
Readonly常量相比const常量,除了在性能上稍微逊色点外,const常量能做到的readonly常量都能做到,const常量不能做到的readonly仍然能做到, 而Readonly对系统性能的影响是微乎其微的,加上从系统的健壮性和可维护性来考虑,我们更应该选择伸缩性强的readonly常量。
下面例举了一些使用const常量会带来的问题:
1、 假设一系统中有两个程序集AAssembly和BAssembly,AAssembly程序集中有一const常量a,BAssembly程序集引用了AAssembly程序集中的const常量a,当系统发布后我们要更新系统的版本,修改了AAssembly程序集中的const常量a的值,根据const常量的特性,如果不将BAssembly程序集重新编译,系统将会发生致命的错误:AAssembly、BAssembly中对const常量a的引用值不一样。
2、 const常量仅限于基础数据类型(数字和字符串),当我们要定义一个非基础类型的常量时该怎么办呢?const是做不到的。
以上这些问题,readonly常量都可以解决,另外由于readonly是运行时常量,我们可以在申明readonly常量时不赋初值(const常量是不行的),在构造函数(constructor)执行时对readonly常量赋值。从而为每一个类的实例存放不同的值。运行时常量可以是一个类的实例成员,也可以是一个类型的静态成员,而编译时常量只能是静态成员,因此类似:static const string m_name;的代码是不能通过编译的。
- 创建常量时尽可能使用readonly,而不是const
- 规则二 对常量使用ReadOnly而不是const
- 原则2:为你的常量选择readonly而不是const
- 为你的常量选择readonly而不是const
- 原则2:为你的常量选择readonly而不是const
- Effective C#阅读笔记-2.使用readonly而不是const变量
- Effective C# 原则2:为你的常量选择readonly而不是const(译)
- Effective C# 原则2:为你的常量选择readonly而不是const
- Effective C# 原则2:为你的常量选择readonly而不是const
- const,readonly 常量与只读
- 尽可能地使用const
- 尽可能使用 const
- 尽可能使用 const
- 尽可能使用const
- item3: 尽可能使用const
- 3、尽可能使用const
- 尽可能使用 const
- 尽可能使用const
- 架构师之路/系统分析员、系统架构师、项目经理的区别/ 软件架构师之路
- 下雨了
- VC++中如何判断当前用户是否具有管理员权限
- 决定成败的30个工作细节
- 关注2009亚洲男篮锦标赛赛果
- 创建常量时尽可能使用readonly,而不是const
- 软件项目经理必备素质
- Singleton(单例)模式
- 单击按钮右键事件
- flex拖拽实例
- debian ustc source
- MIB browser
- pku 1469 COURSES(二分匹配,匈牙利算法)
- 毛病多多的JBoss服务器