[高效编程读书笔记]用readonly而不是const
2012-03-17 15:30
295 查看
开始写读书笔记,迈出从菜鸟到成熟的第一步!
Readonly和Const在初值定下来之后都只读不可写。
Readonly是“只读变量”,Const才是“真常量”。
Const的值是在编译时内联到引用程序集当中,也就是写死了,如果程序集A引用了含有Const常量的程序集B,那么程序集A看到的Const常量就是一个固定的值,如果这个值变了,那么程序集B中的新值要重新编译一遍才能被A识别。而使用Readonly的话,值是运行时确定的,就是说程序集A在程序集B中动态获取了一把。
比较:
注:如果在多处定义了只读变量的初始值,则以构造函数里的为准(运行时)。
结论: Const高效,Static Readonly折中,Readonly灵活。
引申:效率差得不多的情况下,选灵活的解决问题方式。
Readonly和Const在初值定下来之后都只读不可写。
Readonly是“只读变量”,Const才是“真常量”。
Const的值是在编译时内联到引用程序集当中,也就是写死了,如果程序集A引用了含有Const常量的程序集B,那么程序集A看到的Const常量就是一个固定的值,如果这个值变了,那么程序集B中的新值要重新编译一遍才能被A识别。而使用Readonly的话,值是运行时确定的,就是说程序集A在程序集B中动态获取了一把。
比较:
const | static readonly | readonly | |
初始化的时机 | 声明时 | 声明时或构造函数 | 声明时或构造函数 |
值确定的时机 | 编译时 | 运行时 | 运行时 |
可定义的位置 | 字段或函数内的局部常量 | 只能定义为类中的字段常量 | 只能定义为类中的字段常量 |
初始化的位置 | 类字段 | 类字段或静态无参构造函数 | 类字段或构造函数 |
值存储的位置 | 模块元数据 | 托管堆 | 托管堆 |
可指定类型 | 基本类型和string | 任意类型 | 任意类型 |
访问权限 | 静态的,只能由类访问 | 静态的,只能由类访问 | 非静态的,可以由对象访问 |
IL本质 | static literal(静态字面的) | static initonly(静态只可初始化的) | initonly(只可初始化的) |
结论: Const高效,Static Readonly折中,Readonly灵活。
引申:效率差得不多的情况下,选灵活的解决问题方式。
相关文章推荐
- 黑马程序员 改善C#编程的50个建议——偏爱readonly而不是const
- 为你的常量选择readonly而不是const
- 为你的常量选择readonly而不是const(译,转)
- 【C#高效编程50例】条目2:用运行时常量(readonly)而不是编译期常量(const)
- Effective C# 原则2:为你的常量选择readonly而不是const(译)
- 读书笔记之编程之美 - 1.10 双线程高效下载
- Effective C# 原则2:为你的常量选择readonly而不是const[转载]
- 《Effective C++》读书笔记之const高效使用
- 读书笔记 effctive c++ Item 20 优先使用按const-引用传递(by-reference-to-const)而不是按值传递(by value)
- Effective C# 原则2:为你的常量选择readonly而不是const
- Java 8实战之读书笔记四:高效Java 8编程
- 原则2:为你的常量选择readonly而不是const
- 你必须知道的.Net 读书笔记----new 关键字 和const && readonly
- 选择readonly而不是const
- 为你的常量选择readonly而不是const
- [转]Effective C#原则2:为你的常量选择readonly而不是const
- 《CLR via C#》读书笔记(4) -- const与readonly的区别
- EffectiveC#2--为你的常量选择readonly而不是const
- <<TCP/IP高效编程>>读书笔记
- Effiective C#:ITEM2:优先使用readonly而不是const