一尘不染

方法可以设为静态,但是应该吗?

c#

Resharper喜欢在asp.net页面上指出可以静态化的多个功能。如果我将它们设为静态,对我有帮助吗?我应该将它们设为静态并将其移至实用程序类吗?


阅读 240

收藏
2020-05-19

共1个答案

一尘不染

静态方法与实例方法
10.2.5
C#语言规范的静态和实例成员解释了两者之间的区别。通常,静态方法与实例方法相比只能提供很小的性能增强,但是仅在某些极端情况下(有关此问题的更多详细信息,请参见此答案)。

FxCop或代码分析中的规则CA1822指出:

“在[将成员标记为静态]之后,编译器将向这些成员发出非虚拟的调用站点,这将阻止在运行时检查每次调用,以确保当前对象指针为非空。这可以带来可观的性能提升对于性能敏感的代码。在某些情况下,无法访问当前对象实例表示正确性问题。”

实用
程序类除非在您的设计中有意义,否则不要将它们移至实用程序类。如果静态方法与特定类型相关,就像ToRadians(double degrees)方法与表示角度的类相关,则将该方法作为该类型的静态成员存在是有意义的(请注意,出于演示目的,这是一个复杂的示例)。

2020-05-19