我所理解的readonly和const

时间:2023-01-05 06:12:55

最近要给学校软件小组新成员讲几次课,所以把很多以前懒得学习的和模糊不清的知识点,重新学习了一下。

MSDN是这样解释的:

readonly 关键字与 const 关键字不同。 const 字段只能在该字段的声明中初始化。 readonly 字段可以在声明或构造函数中初始化。 因此,根据所使用的构造函数,readonly 字段可能具有不同的值。 另外,const 字段为编译时常数,而 readonly 字段可用于运行时常数.

什么是编译时常数,什么是运行时常数呢。我想做下面的实验,关于readonly和const你会理解的更好

在项目外新建个类库,类库中的一个TestClass类定义一个const字段和一个readonly字段

public const int ParamOne=100;

public static readonly int ParamTwo=100;

在控制台项目调用并输出两个值,预期效果当然是100,100;

下面所做的将会帮助你理解const和readonly的区别所在。

修改类库中的ParamOne=50;ParamTwo=50;

不要重新生成整个项目,仅重新生成类库,bin目录下找到dll文件,复制到控制台bin目录下(目的是不重新编译生成控制台的项目)

双击控制台的exe文件,接下来会发生什么?

输出的值是100和50;

也就是说  const的值没有改变,但是readonly的值改变了。

原因是什么呢?

const的值是保存到元数据,直接嵌入代码,而readonly的值,则是运行时赋值。