const和static readonly的确很像:通过类名而不是对象名进行访问,都是将变量声明为只读,且在变量初始化后就不可改写,

在多数情况下可以混用。

二者本质的区别在于,牵扯到本质 就要区分静态 和动态常量:

静态常量(compile-time constants):静态常量是指编译器在编译时候会对常量进行解析,并将常量的值替换成初始化的那个值

动态常量(runtime constants):动态常量的值则是在运行的那一刻才获得的,编译器编译期间将其标示为只读常量,而不用常量的值代替,这样动态常量不必在声明的时候就初始化,而可以延迟到构造函数中初始化。

这两者具有不同的特性,错误的使用不仅会损失效率,而且还会造成错误。

const的值是在编译期间确定的,因此只能在声明时通过常量表达式指定其值,因此他符合静态常量。

readonly是在运行时计算出其值的,他修饰的常量会延迟到运行的时候

所以还可以通过静态构造函数来赋值

 

const int num = 10;  //这里 main方法首次启动时就给num确定值了
static readonly int num =10;   //而用readonly时需要程序走到这地各方的时候 才会赋固定值


//,const修饰的常量在编译期间便已将num的字面值算出来了,而static readonly修饰的常量则未解析

 

 

static  readonly

此外const常量既可以声明在类中也可以在函数体内,但是static readonly常量只能声明在类中。

明白了这个本质区别,我们就知道语句中static readonly和const能否互换了,

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!