为什么ReSharper更喜欢使用const而不是readonly?

13

我注意到在“常见实践和代码改进”下,ReSharper建议进行将局部变量或字段转换为常量

我还注意到,在比尔·瓦格纳的书《Effective C#:提高C#的50种具体方法》中,有一个语言习惯更喜欢用readonly而不是const,作者解释了使用const存在的风险。

我的问题不是关于readonly和const之间的区别以及何时使用它们,而是为什么一个来源将const作为常见实践/代码改进,而另一个来源则将readonly视为一种惯用语?


4
请仔细阅读:"我的问题不是关于readonly和const之间的区别及何时使用它们的问题"。 - Dariusz Woźniak
3个回答

9

私有常量不像公共常量那样存在风险。ReSharper可能会建议在字段不可外部访问的情况下进行性能优化。


1
这是关键点。私有常量没有可维护性问题,因为它们永远不会直接嵌入到外部程序集中。 - Dan Bryant

2
在我使用ReSharper的经验中,如果您在声明中设置变量值,但该变量的值在整个方法中从未更改,则会收到此建议。在这种情况下,它可以被转换为局部常量。如果您在类体中初始化了实例变量,但从未在任何地方更改过该值,则也会收到警告。
那本书的作者基本上认为,通过使用"readonly"而不是"const",您可以避免在更改"readonly"值时重新构建依赖程序集。相比之下,对于"const"的更改,您必须重新编译依赖程序集以针对带有"const"的新版本的程序集。
这是一个合理的论点,然而,如果一个值在应用程序的整个生命周期内都不会改变,我仍然认为最好使用"const"。例如,我喜欢使用"readonly"来加载自配置后不会更改的值。
我认为,拥有"const"提供的代码清晰度要比稍微多一些编译维护更好。

是的,如果将只读字段声明为实例变量并且在代码中没有更改其值,则会收到该警告。我倾向于支持Resharper而不是Bill Wagoner,原因在我的编辑中提到。但Wagoner也有一些好观点,这只是一个观点问题。 - dcp

0

可能是因为这个原因:

The expression being assigned to a must be constant

您可以随时将常量分配给readonly字段。但是似乎无法将readonly分配给const


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接