Const和readonly的比较
开门见山的说,他们是不同类型的常量
一,const是编译时常量,意思就是编译的时候const声明的对象值就已经确定了,如果这以后改了值不编译的话值还是原来的值
说的有点拗口,看代码
const int B = 6;//编译,
然后你改成
const int B = 8;//不编译
这时候其实B=6;
这个就是const编译时常量的意思
很显然,readonly是运行时常量
static readonly int A = 9;
只要在运行之前改了A的值,A的值就是你最后一次改的值
二,const必须在声明的时候赋值
const int F;
这样的代码是无法通过编译的
const int f=8;//赋初始值才可以
readonly不一定要声明时候赋值,当然可以在声明的同事初始化,或者在构造函数时候初始化
readonly int G;
readonly int G=6;
以上两种声明写法都可以
三,数据类型支持
const支持的数据类型较少,只支持数字,字符串,枚举类型
const DateTime E = DateTime.Now;
上面这行代码无法通过编译
readonly DateTime E = DateTime.Now;
上面这种代码没问题,readonly支持任何类型
四,性能比较
const略占优势,从编译时还是运行时就可以知道
其实,也是微乎其微的优势
一般取值永久不变的时候,例如圆周率可以声明位 const double h = 3.14;
最后,我的小建议,如果实在搞不清楚二者的区别,我建议你就用readonly吧!