[高效编程读书笔记]用readonly而不是const

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灵活。

引申:效率差得不多的情况下,选灵活的解决问题方式。

posted @ 2012-06-11 19:41  伯箫  阅读(187)  评论(0编辑  收藏  举报