编译时常量与运行时常量

  最近了解了一下这两个常量的区别,网上介绍的很多,说的多是const 与 readonly的区别,其中的区别就不多说了,自己打开VS验证一下这其中的区别。

  一开始没注意 readonly 前的 static 这个关键字。开始也想验证的是 const 和 readonly,这个应该无关大雅。在调用常量过程中发现不对劲了,const定义的常量是需要类名调用的,readonly则是需要new一个对象调用,这明显调用方式都不一样了,这样对比这两个关键字就不平等了。其实这样的问题应该看到就能发现了,也是我对const这个关键字不熟悉,才到了验证时才发现。

  要对比的话,确切的说应该是  static readonly 与 const 的区别,这样两个都是用类名调用常量,这才能公平竞争。实现的效果也正如网上其他帖子所说的一样。调用const常量,编译时就会将常量的值赋予调用方,调用 static readonly常量则是获取该变量,运行时,才会将值传给调用方。这样就导致不同的程序集如果有调用到const的常量,就需要重新编译才能获取正确的值了,否在获取的还是原来的值。

  一个对比的小细节,记录一下

即使是尽在眼前的风景,每踏出一步,都会是一个新世界。
原文地址:https://www.cnblogs.com/blacktusz/p/8493510.html