ReSharper喜欢在每个ASP中指出多个函数。NET页面,可以设置为静态。如果我把它们变成静态的,对我有帮助吗?我是否应该将它们设置为静态并将它们移动到实用程序类中?


当前回答

使方法静态意味着您可以从类外部调用该方法,而无需首先创建该类的实例。这在使用第三方供应商对象或附加组件时非常有用。想象一下,如果你在调用con. writeline()之前必须先创建一个Console对象“con”;

其他回答

您应该在给定的场景中使用最易读和最直观的方法。

除了在最极端的情况下,性能参数并不是一个好的参数,因为实际发生的唯一事情是将一个额外的参数(this)推入到实例方法的堆栈中。

静态方法与实例方法 c#语言规范的静态成员和实例成员解释了这种差异。一般来说,静态方法可以提供比实例方法非常小的性能增强,但仅在某些极端情况下(有关详细信息,请参阅此回答)。

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

在[将成员标记为静态]之后,编译器将向这些成员发出非虚拟调用站点,这将防止在 运行时,确保当前对象指针为 非空。这可以导致可测量的性能增益 性能敏感的代码。在某些情况下,访问失败 当前对象实例表示正确性问题。”

实用程序类 除非在设计中有意义,否则不应该将它们移到实用程序类中。如果静态方法与特定类型有关,就像ToRadians(双度)方法与表示角度的类有关一样,那么该方法作为该类型的静态成员存在是有意义的(注意,为了演示,这是一个复杂的示例)。

ReSharper不检查逻辑。它只检查方法是否使用实例成员。 如果方法是私有的,并且只被(可能只有一个)实例方法调用,这是一个让它成为实例方法的标志。

使方法静态意味着您可以从类外部调用该方法,而无需首先创建该类的实例。这在使用第三方供应商对象或附加组件时非常有用。想象一下,如果你在调用con. writeline()之前必须先创建一个Console对象“con”;

对于类中的复杂逻辑,我发现私有静态方法在创建隔离逻辑时很有用,其中实例输入在方法签名中明确定义,并且不会发生实例副作用。所有输出必须通过返回值或out/ref参数。将复杂的逻辑分解成无副作用的代码块可以提高代码的可读性和开发团队对它的信心。

另一方面,它可能导致类被大量实用方法所污染。通常,逻辑命名、文档和团队编码约定的一致应用程序可以缓解这种情况。