将无状态方法设为静态是好还是坏?

时间:2017-01-05 14:54:22

标签: c# static refactoring procedural-programming

如果类方法不依赖于类的状态,那么它可以是静态的。在这种情况下,使这些方法保持静态是好的还是坏的做法?

(标记为C#,但可能适用于许多OO语言,其中方法必须是类成员。)

2 个答案:

答案 0 :(得分:4)

Visual Studio Code Analysis和ReSharper建议将这些方法设为静态,因为它具有很小的性能优势:

来自MSDN

  

不访问实例数据或调用实例方法的成员可以标记为static(在Visual Basic中为Shared)。将方法标记为静态后,编译器将向这些成员发出非虚拟调用站点。发出非虚拟调用站点将阻止在运行时检查每个调用,以确保当前对象指针为非null。这可以为性能敏感的代码实现可测量的性能增益。在某些情况下,无法访问当前对象实例表示正确性问题。

对于非“性能敏感”代码,这是一个品味问题。如果我没有充分理由不遵守ReSharper的建议,我会亲自服从。

答案 1 :(得分:1)

  

在这种情况下使这些方法保持静态是好的还是坏的做法   案件?

老实说,没有办法说100%这是好事还是坏事。许多人遵循一般规则,如果它可以是静态的,那么这样做。它表明对状态没有要求,技术上(至少在C#中)它要快一点。

话虽这么说,但这完全取决于方法的代码组成,以及应用程序将如何发展。