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

Mr.*_*Boy 5 c# refactoring static procedural-programming

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

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

Ren*_*ogt 5

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

文档

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

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