如果有一个值不太会变化,我们经常使用const和readonly,这2者有何不同呢?有时候,我们也会在readonly之前加上关键字static,这又意味着什么呢?
const
● const默认是静态的,可以通过"类名.字段名"来访问。● const变量只能在声明的时候赋值,不能在构造函数中为const类型变量赋值。● 一旦程序集被编译,const变量会被写进程序集的IL代码中。如果想修改const变量值,必须在修改值后再重新生成程序集。● const是编译期变量
以上,可以通过Test.defaultValue来获取变量defaultValue的值。在Test构造中为defaultValue赋值会报错,只能在声明defaultValue的时候赋初值。public class Test{public const int defaultValue = 10;//这里报错:因为不能在构造函数内为const变量赋值public Test(){defaultValue = 1000;}}
readonly
● readonly默认是实例变量,只能通过"对象实例.字段名"来访问。● readonly变量可以在声明的时候或在构造函数内赋值。● 如果想改变readonly变量值,只需要在声明变量或构造函数内修改,不需要重新生成程序集。● readonly是运行时变量
class PRogram{static void Main(string[] args){Test test = new Test();Console.WriteLine(test.rdValue);Console.ReadKey();}}public class Test{public readonly int rdValue;public Test(){this.rdValue = 100;}//这里报错:因为只能在声明变量或构造函数内对readonly变量赋值public int RDVaue{get { return rdValue; }set { rdValue = value; }}}
以上,通过Test类的实例来获取readonly变量值,test.rdValue。在RDValue属性中为readonly变量rdValue赋值会报错。
如果在readonly之前加上static关键字:● 此时的readonly变量只能在声明变量的时候赋值● 此时的readonly变量可以通过"类名.字段名"来访问● 此时的readonly变量变成了编译期变量
新闻热点
疑难解答