私有方法是否有静态的目的?

时间:2013-11-20 14:09:53

标签: .net static

据我所知,静态的唯一目的是启用一个方法在类本身上调用,而不是它的实例。但是如果该方法也是私有的,那么你只能从类中调用它。那么,是否有理由将某些内容声明为私有和静态? ReSharper建议我将我的许多方法设置为静态,而我只是看不到私有方法。

4 个答案:

答案 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