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

Roy*_*mir 9 .net c# resharper

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

Ash*_*ohn 25

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

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

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


sha*_*oth 10

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


Pau*_*ips 5

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

但我想展示它如何使您受益。很多时候,当某个大方法可以变成静态时,这暗示着那里还有另一个责任,最好的处理方法可能是为该任务提取另一个对象。

它还可以产生连锁反应类型的效果 - 比如说 A 调用 B,两者都是非静态的。现在 Resharper 告诉我们 B 可以变成静态的;我们让它做它该做的事。现在也许 A 也可以变成静态的。也许A完全也是另一种责任。

在重构旧代码时,这种效果对我来说很方便。它让我看到了职责和要点,我可以在其中删除代码,而不必费尽心思处理每一英寸的文本。