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