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

C# ReSharper暗示我应该在WebForms中使用静态方法-为什么?我错过什么了吗?,c#,asp.net,webforms,C#,Asp.net,Webforms,ReSharper有时暗示我可以在WebForms中使一些随机实用程序方法成为静态的。我为什么要这样做?据我所知,这样做没有好处。。还是有?就WebForms中的静态成员而言,我遗漏了什么吗?Resharper建议如果方法不使用类中的任何非静态变量或方法,则将其转换为静态方法 好处可能是性能略有提高(应用程序将使用更少的内存),并且会减少一个resharper警告;) Resharper建议如果方法不使用类中的任何非静态变量或方法,则将其转换为静态 好处可能是性能略有提高(应用程序将使用更少的内

ReSharper有时暗示我可以在WebForms中使一些随机实用程序方法成为静态的。我为什么要这样做?据我所知,这样做没有好处。。还是有?就WebForms中的静态成员而言,我遗漏了什么吗?

Resharper建议如果方法不使用类中的任何非静态变量或方法,则将其转换为静态方法


好处可能是性能略有提高(应用程序将使用更少的内存),并且会减少一个resharper警告;)

Resharper建议如果方法不使用类中的任何非静态变量或方法,则将其转换为静态


好处可能是性能略有提高(应用程序将使用更少的内存),并且会减少一个resharper警告;)

我不介意任何性能改进,但您可能希望静态方法对实例没有副作用。因此,除非你有很多静态(是吗?),否则这会泄露你的意图,即这个方法类似于一个函数,只查看参数并(可选)返回一个结果


对我来说,当我阅读别人的代码时,这是一个很好的提示。我不太担心共享状态,可以更容易地看到信息流。通过声明它是静态的,它在做什么方面受到了更大的限制,这对我这个读者来说不太值得担心。

我不介意任何性能改进,但您可能喜欢的是静态方法对实例没有副作用。因此,除非你有很多静态(是吗?),否则这会泄露你的意图,即这个方法类似于一个函数,只查看参数并(可选)返回一个结果


对我来说,当我阅读别人的代码时,这是一个很好的提示。我不太担心共享状态,可以更容易地看到信息流。通过声明它是静态的,它可以做的事情要约束得多,这对我这个读者来说就不那么需要担心了。

您将获得性能改进,FxCop规则CA1822也是一样的

发件人:

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


您将获得性能改进,FxCop规则CA1822也是如此

发件人:

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


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

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

class C 
{
  public int DoubleIt(int x, string y, Type z)
  {
    return x * 2;
  }
}
这是一种精心设计的方法吗?不会。它会获取所有类型的信息,然后忽略这些信息,而不会使用这些信息来计算结果或执行副作用。为什么强制调用方传入不必要的字符串并键入

现在,请注意,这个方法还接受一个C,以传递到调用中的“this”的形式。这也被忽略了。此方法应该是静态的,并采用一个参数

一个设计良好的方法能够准确地获取计算结果和执行副作用所需的信息,不多不少。Resharper告诉您代码中有一个设计缺陷:您有一个方法接收了它忽略的信息。要么修复该方法,使其开始使用该信息,要么通过使该方法保持静态来停止传递无用数据


同样,对性能的关注完全是在转移注意力;你永远不会注意到有这么小的差别,除非你所做的事情是以几个处理器周期的顺序进行的。警告的原因是提醒您注意逻辑设计缺陷。获得正确的程序逻辑比在这里或那里减少一纳秒要重要得多。

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

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

class C 
{
  public int DoubleIt(int x, string y, Type z)
  {
    return x * 2;
  }
}
这是一种精心设计的方法吗?不会。它会获取所有类型的信息,然后忽略这些信息,而不会使用这些信息来计算结果或执行副作用。为什么强制调用方传入不必要的字符串并键入

现在,请注意,这个方法还接受一个C,以传递到调用中的“this”的形式。这也被忽略了。此方法应该是静态的,并采用一个参数

一个设计良好的方法能够准确地获取计算结果和执行副作用所需的信息,不多不少。Resharper告诉您代码中有一个设计缺陷:您有一个方法接收了它忽略的信息。要么修复该方法,使其开始使用该信息,要么通过使该方法保持静态来停止传递无用数据

同样,性能问题也是一个问题