什么时候,如果有的话,我们应该使用const?

Const被烘焙到客户端代码中。 Readonly不是。 但const更快。 可能只是略有一点。

问题是,是否有任何情况你应该更喜欢const不是readonly ? 或者重新说一下,使用readonly而不是const (请记住上面说的烘焙事件),我们实际上总是更好吗?

我相信“const”唯一合适的时候就是当你编写的规范比你正在编写的程序更持久时。 例如,如果您正在实施HTTP协议,那么拥有“GET”的const成员是合适的,因为它永远不会改变,并且客户端当然可以将其硬编码到其编译的应用程序中而不必担心您需要更改价值以后。

如果您有任何机会需要在将来的版本中更改值,请不要使用const。

哦! 除非你已经测量过,否则永远不要认为const比readonly字段快。 有JIT优化可能使它实际上完全相同。

Const vs readonly :

关于C#中’const’和’readonly’之间差异的快速概要:’const’:

  • 不能是静态的。
  • 编译时评估值
  • 仅在声明时宣传。

‘只读’:

  • 可以是实例级也可以是静态的。
  • 运行时评估值
  • 可以在声明中或在构造函数中的代码中初始化。

更正:以上状态const不能是静态的。 这是用词不当。 他们不能应用静态关键字,因为它们已经是静态的。

因此,对于要在编译时评估的静态项,请使用const。

您可以在switch语句fwiw中使用const值作为大小写。

当初始化不直接时,readonly很有用。
在编译之前确定值时,可以使用const。

在某种程度上,readonly是一个运行时const&const是一个编译时常量值。

编辑:如果你使用www.koders.com查看一些代码,你会发现readonly可以使用const。 我认为,其背后的原因可能是它在构造函数中是可修改的(如果需要)。 对于const(特别是public),您有可能根据代码破坏客户端代码。

我通常只将const用于我知道永远不会改变的事物,例如真空中的光速。

对于可能发生变化的事情,我更喜欢readonly。 这样我只需要在发生更改时重新编译一个dll。 这个经验法则的一个例外是变量是对其自己的程序集的私有/保护/友好。 在这些情况下,使用const是安全的。

const不能用于类或结构(字符串常量和null除外,正如Skeet先生指出的那样),仅用于值类型并作为静态字段访问。 const的值在编译时设置,必须在声明时设置。

readonly可用于除枚举之外的任何内容,可以是静态字段或实例字段。 readonly的值在运行时设置,可以根据调用的构造函数进行不同的设置。

这是一个很好的页面 ,可以概述const,readonly和static关键字。

您应该更喜欢在编译时测试的修饰符而不是在运行时测试的修饰符(在此上下文中是const over readonly)。 您应该始终使用支持所需语义的修饰符。 如果某些事情不是要修改的话 – 保护它或某人会写一些东西(偶然或无知)。

只要您可以在声明中设置值而不必等待构造函数,就应该使用const。

const的良好用途是键/值对的键。 例如,如果您仍在使用AppSetting(而不是ApplicationSettings),则将密钥名称加载到配置设置并不合理。 如果它在几个地方使用,请将Key粘贴在const中。