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



我想知道为什么resharper建议在非静态类中使用静态方法?是否用于保存实例的创建?是表现的问题吗?另外,为什么它建议'const'一些参数?是表现的问题吗?

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

因此,如果方法不与类的任何属性的状态变化相关联,那么将该方法设置为静态是明智的,因为它可以提高性能

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

这是一个可读性问题。当您创建一个方法static时,您明确声明它不访问非静态成员变量。如果你把一个变量标记为const,你就清楚地表明它不能(因此也不会)在代码中被改变。

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

但是我想向展示它如何对你有益。通常,当一些大的方法可以被设置为静态时,这是一个暗示,那里有另一个职责,最好通过为该任务提取另一个对象来处理。

它也可以产生连锁反应类型的效应——比如a调用B,两者都是非静态的。Resharper告诉我们B可以是静态的;我们让它做它该做的事。也许A也可以是静态的。也许A是也是另一个完全的责任。

这个效果在我重构旧代码的时候派上了用场。它让我看到责任和点,我可以削减代码,而不必为每一英寸的文本汗淋漓。

静态类不需要实例调用该类,resharper足够聪明地发现方法可以是静态的,所以人们可以在没有实例的情况下使用该方法。

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

无论如何,如果你不喜欢这些建议,那么你也可以关闭它

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

实际上,我想说的是JetBrains应该删除他们默认的建议,让const优于静态只读。阅读这里:https://www.exceptionnotfound.net/const-vs-static-vs-readonly-in-c-sharp-applications/

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

说到速度?嗯…编译器已经走了很长很长的路,而且非常聪明。从长远来看,从const中获得的速度性能可以忽略不计。

最新更新