【问题标题】:Why does ReSharper prefer consts over readonly?为什么 ReSharper 更喜欢 consts 而不是 readonly?
【发布时间】:2011-03-24 19:50:43
【问题描述】:

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

我还注意到,在 Bill Wagner 的书“Effective C#: 50 Specific Ways to Improve Your C#”中,有一个语言习语“Prefer readonly to const”,作者在其中解释了使用 const 的风险。 p>

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

【问题讨论】:

  • 仔细阅读:“我的问题不在于 readonly 和 const 之间的区别以及何时使用它们”...

标签: c# resharper constants readonly


【解决方案1】:

根据我使用 ReSharper 的经验,如果您在声明中设置变量值,您会得到这个建议,但变量的值在整个方法中永远不会改变。在这种情况下,可以将其制成局部常数。您还将在就地初始化的实例变量上收到警告,但永远不要更改类主体中任何位置的值。

那本书的作者基本上提出了这样的论点,即通过使用readonly 而不是const,如果更改readonly 的值,就可以避免重新构建依赖程序集。相反,要更改为const,您必须针对具有const 的新版本的程序集重新编译依赖程序集。

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

我认为拥有const 提供的代码清晰度要好得多,但可能会花费更多的编译维护。

【讨论】:

  • 是的,如果只读字段被声明为实例变量并且您没有在代码中的任何地方更改它的值,您将收到该警告。由于我在编辑中提到的原因,我倾向于在这里同意 Resharper 而不是 Bill Wagoner。但瓦格纳的观点很好,只是见仁见智。
【解决方案2】:

私有常量不承担与公共常量相同的风险。 ReSharper 可能会建议针对字段在外部不可见的情况进行性能优化。

【讨论】:

  • 这是这里的重点。私有常量没有可维护性问题,因为它们永远不能直接烘焙到外部程序集中。
猜你喜欢
  • 2015-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-28
  • 2023-01-16
相关资源
最近更新 更多