关于const和readonly的一些用法与区别
来源:http://www.manew.com/blog-242626-43358.html
①只读变量readonly分静态只读变量和非静态只读变量,非静态的需要实例化对象进行访问
②只读变量可以进行再赋值,但只有初始化,在构造器中这两次,实例化完毕后就无法再赋值
③静态只读变量只有在静态构造函数中再次赋值,非静态只读变量只有在普通构造函数中赋值
④const常量自带static,无法用static修饰符,但也受到访问修饰符影响,例如:public,private
⑤const常量只能在初始化定义时赋一次值,其他任何情况都无法赋值,只能使用
以下是论证:
关于这两者关键字,最开始其实我也是一直有些混乱,最近在网上查了些,然后自己总结了下,我尽量写详细些吧,虽然语文一直在及格线上徘徊
然后我们可以看出,直接在构造函数里面给a赋值将会失败,提示:无法对静态只读字段赋值(静态构造函数或变量初始值中除外)
不过我们可以直接使用这个变量a
在Main函数中直接赋值也会报这个错。
然后我们删除,直接打印testClass.a
由于水印,可能看不清,具体是这么写的:Console.WriteLine("a=" + testClass.a);
然后根据提示我们来在静态构造函数中进行再赋值:
n是我额外加的一个判断静态构造函数执行次数的计数变量,暂时不管
之后再次测试结果:
大致应该懂了readonly的基础用法,也就是在初始化的时候可以赋一次初值外,在静态构造函数中也可以执行赋值
然后是测试const,经测试,只能在定义const时进行赋值,其他任何情况都无法更改const的值
最后,测试非静态只读变量c
图中可知,对于readonly,也必须得满足面向对象的写法,非静态变量依然得实例化一个对象来"."出来使用
不过也得到一个信息就是,readonly可以在对象构造函数中进行再赋值,接下来看看这个赋值是否有效(c在定义时赋的是"d"):