如果有的话,我们应该使用const吗?

问题描述 投票:26回答:10

Const被纳入客户端代码。 Readonly不是。但const更快。可能只是略有一点。

问题是,是否有任何情况你应该更喜欢const而不是readonly?或者换句话说,使用readonly而不是const(记住上述烘焙用品)我们几乎总是更好吗?

c# const readonly
10个回答
29
投票

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

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

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


0
投票

当字段是简单类型(数字,布尔值或字符串)时,使用const,它们的值永远不会更改。如果更改其值,则应重新编译项目。

当从其他来源(文件,数据库或其他代码,..等)初始化时使用readonly字段,但随后它们将不会被更改。

如果要使所有实例共享static readonly字段,请使用这些字段。


15
投票

Const vs readonly

关于C#中'const'和'readonly'之间差异的简要概述:'const':

  • 不能是静止的。
  • 在编译时评估值。
  • 仅在声明时初始化。

'只读':

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

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

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


4
投票

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


3
投票

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

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

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


3
投票

我通常只使用const来做我知道永远不会改变的事情,比如真空中的光速。

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


2
投票

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

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

Here's a good page概述了const,readonly和static关键字。


1
投票

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


0
投票

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.