为什么resharper建议使用const,静态操作?

时间:2011-08-11 05:06:01

标签: c# .net resharper

我想知道为什么resharper建议在非静态类中使用静态方法? 它是否用于保存实例的创建?这是性能问题吗? 另外,为什么它建议'const'一些参数?这是性能问题吗? 我很乐意得到一些解释

6 个答案:

答案 0 :(得分:24)

当编译器遇到静态方法时,它会发出call条指令,但遇到实例方法时会发出callvirt条指令。现在callvirt指令在进行调用之前检查对象是否为null。因此,它会附加性能损失。但它有助于使方法调用多态。

因此,如果该方法与类的任何属性的状态更改无关,建议将该方法设为静态,因为它会提高性能

关于const的使用,它是值的编译时关联,而不是在运行时。所以const的所有变量都被编译时自身的值替换,这显然提高了性能。

答案 1 :(得分:10)

这是一个可读性的问题。当您创建方法static时,您明确表示它不访问非静态成员变量。如果您标记变量const,则表明它不能(因此不会)在代码中更改。

答案 2 :(得分:4)

其他答案都是正确的,这只是一个很好的做法。

但我想展示如何它可以让你受益。很多时候,当某个大方法可以变成静态时,它暗示了那里有另一个责任,最好通过为该任务提取另一个对象来处理。

它也可以产生链反应型效应 - 比如说A叫B,都是非静态的。现在Resharper告诉我们B可以变得静止;我们让它做它的事情。现在也许A也可以变得静态。也许A完全是另一个责任

在重构旧代码时,这种效果对我来说很方便。它让我看到了责任和要点,我可以在不必为每一寸文字而流汗的情况下剪掉代码。

答案 3 :(得分:2)

静态类不需要实例来调用该类,并且Re sharper足够聪明,可以确定该方法可以是静态的,因此人们可以在没有实例的情况下使用该方法。

如果变量仅用于保存一些实时值,那么最好将它们转换为常量,这样可以避免我们意外更新该变量。这是一个很好的做法,并且Re sharper建议我们一样。

无论如何,如果您不喜欢这些建议,那么您也可以将其关闭。

答案 4 :(得分:1)

这样做是因为它检测到方法体中没有使用类成员变量。

答案 5 :(得分:0)

实际上,我会尽可能地说JetBrains应该删除它们的默认值,以便建议使用const over static readonly。 请在此处阅读:https://www.exceptionnotfound.net/const-vs-static-vs-readonly-in-c-sharp-applications/

总结一下,当您处理多个程序集时,Const变量非常混乱。如果程序集A具有const X,而程序集B使用该X.则必须重新编译程序集B每次组件A更改该X值。 它只是给你一个你不想要的头痛!

谈到速度?嗯...编译器已经成为一种loooooooong方式,非常聪明。从长远来看,从const获得的速度性能可以忽略不计。

相关问题