ReSharper暗示我应该在WebForms中做静态方法 - 为什么?我错过了什么吗?

cll*_*pse 1 c# asp.net webforms

ReSharper有时暗示我可以在我的WebForms静态中创建一些随机实用程序方法.我为什么要这样做?据我所知,这样做没有任何好处..或者在那里?我是否遗漏了WebForms中静态成员的内容?

Eri*_*ert 9

真正的原因不是性能原因 - 如果它有任何影响,将以十亿分之一秒来衡量.

真正的原因是,不使用其实例的实例方法在逻辑上是一个设计缺陷.假设我给你写了一个方法:

class C 
{
  public int DoubleIt(int x, string y, Type z)
  {
    return x * 2;
  }
}
Run Code Online (Sandbox Code Playgroud)

这是一个精心设计的方法吗?不需要它接受所有类型的信息,然后忽略并且不用于计算结果或执行副作用.为什么强制调用者传入不必要的字符串并输入?

现在,注意这个方法也接受一个C,以"this"的形式传入调用.这也被忽略了.此方法应该是静态的,并采用一个参数.

精心设计的方法可以精确地获取计算结果所需的信息并执行其副作用,不多也不少.Resharper告诉你,你的代码中存在设计缺陷:你有一种方法可以接收它忽略的信息.修复方法以使其开始使用该信息,或者通过使方法静态来停止传入无用数据.

再次,表现关注的是一个完整的红鲱鱼; 你永远不会注意到一个小的区别,除非你正在做的事情需要几个处理器周期的顺序.警告的原因是提醒您注意逻辑设计缺陷.获得正确的程序逻辑远比在这里和那里削减纳秒更重要.


Ben*_*zun 5

我不介意任何性能改进,但您可能希望静态方法对实例没有任何副作用.所以,除非你有很多静态的(你呢?)这给了你的意图,这种方法类似于一个功能,仅看参数和(可选)返回结果.

对我来说,当我读到其他人的代码时,这是一个很好的暗示.我不太担心共享状态,可以更容易地看到信息流.通过将其声明为静态,它可以做的事情受到更多限制,这对于我,读者而言不那么令人担心.

  • 您认为静态方法以某种方式防止变异实例的观点是错误的.静态方法可以像实例方法一样改变实例. (2认同)