为什么Resharper比readonly更喜欢consts?

时间:2010-08-03 16:04:09

标签: c# resharper const readonly

我注意到Resharper在“通用实践和代码改进”下的建议:将局部变量或字段转换为常量

我也注意到在比尔瓦格纳的书“Effective C#: 50 Specific Ways to Improve Your C#”中,有一个语言“首选只读const ”,其中作者解释了使用consts的风险。

我的问题不是关于readonly和const之间的区别以及何时使用它们,而是为什么一个源将const作为常见的练习/代码改进而另一方面第二个将readonly视为习惯用法?

2 个答案:

答案 0 :(得分:9)

私有常量不具有与公共常量相同的风险。 Resharper可能建议对场外不可见的情况进行性能优化。

答案 1 :(得分:2)

根据我使用Resharper的经验,如果要在声明中设置变量值,则会得到此建议,但变量的值在整个方法中永远不会改变。在这种情况下,它可以被制成局部常量。您还将获得有关您初始化的实例变量的警告,但绝不会在类体中的任何位置更改该值。

该书的作者基本上认为,通过使用readonly而不是const,您可以避免在更改readonly值的值时重建依赖程序集。相反,对于const的更改,您必须使用const针对新版本的程序集重新编译依赖程序集。

这是一个合理的论据,但是,如果一个值在应用程序的整个生命周期中都不会改变,我仍然认为使用const会更好。我喜欢将readonly用于我从配置中加载的值,例如,在构造函数中初始化后不会更改。

我认为,const提供的代码清晰度可能会花费更多的编译维护费用。