据我所知,静态的唯一目的是启用一个方法在类本身上调用,而不是它的实例。但是如果该方法也是私有的,那么你只能从类中调用它。那么,是否有理由将某些内容声明为私有和静态? ReSharper建议我将我的许多方法设置为静态,而我只是看不到私有方法。
答案 0 :(得分:2)
是的,如果您在课程中有(public
或其他)static
方法,则此方法需要使用您的private
方法。如果它不是static
,那就不起作用。
public static void Foo1()
{
Foo2(); // compile time error
}
private void Foo2()
{
}
方法只有在需要使用非静态的字段或属性(以及继承等其他原因)时才需要是实例方法。因此,最好将其设为静态。
答案 1 :(得分:1)
性能。这是一种(微观)优化。 CLR需要执行更少的步骤来找到他需要执行的方法。
详细说明: http://msdn.microsoft.com/en-us/library/79b3xss3.aspx
对静态方法的调用会在Microsoft中生成调用指令 中间语言(MSIL),而对实例方法的调用 生成一个callvirt指令,该指令还检查一个null对象 引用。但是,大多数时候性能不同 两者之间并不重要。
答案 2 :(得分:1)
如果您的私有方法不使用任何实例方法或字段或属性,那么最好将其标记为静态。
这样做,你得到IL中发出的call
操作码,在调用方法之前不会执行任何“空检查”。其中,实例方法发出callvirt
操作码,在调用方法之前执行“空检查”。这有助于您获得性能优势。
答案 3 :(得分:0)
如果编写的方法不使用对象的状态并且是实现细节,则往往会看到这种情况。您可以将其设为private
,但有些人更愿意将其设为static
,以完全表明该方法不会触及该状态。
就个人而言,我会选择private
。