【问题标题】:Is there a purpose behind making a private method static?将私有方法设为静态是否有目的?
【发布时间】:2013-11-20 14:09:52
【问题描述】:

据我了解,静态的唯一目的是使方法能够在类本身上被调用,而不是在它的实例上调用。但是,如果该方法也是私有的,您将只能从类中调用它。那么,是否有理由将某些东西声明为私有和静态? ReSharper 建议我将我的许多方法设为静态,而我只是不明白私有方法的意义。

【问题讨论】:

    标签: .net static


    【解决方案1】:

    是的,如果您在类中有(public 或其他)static 方法,并且此方法需要使用您的 private 方法。如果不是static,那是行不通的。

    public static void Foo1()
    {
        Foo2(); // compile time error
    }
    
    private void Foo2()
    {
    
    }
    

    仅当方法需要使用非静态的字段或属性(以及继承等其他原因)时,它们才需要是实例方法。因此,最好将其设为静态。

    【讨论】:

    • 虽然我想说每个人都回答了我的问题,但这似乎是使私有方法成为静态的最实际的原因,所以我会接受这个作为答案。
    【解决方案2】:

    如果您的私有方法不使用任何实例方法或字段或属性,那么最好将其标记为静态。

    这样做,您会在 IL 中得到call 操作码,在调用该方法之前不会执行任何“空值检查”。其中实例方法发出callvirt 操作码,它在调用方法之前执行“空检查”。这有助于您获得性能优势。

    【讨论】:

      【解决方案3】:

      性能。这是一个(微)优化。 CLR 需要执行更少的步骤来找到他需要执行的方法。

      详细解释: http://msdn.microsoft.com/en-us/library/79b3xss3.aspx

      对静态方法的调用会在 Microsoft 中生成调用指令 中间语言 (MSIL),而对实例方法的调用 生成一个 callvirt 指令,该指令还检查空对象 参考。但是,大多数时候性能差异 两者之间不显着。

      【讨论】:

        【解决方案4】:

        如果编写的方法不使用对象的状态并且是实现细节,您往往会看到这一点。你可以直接改成private,但有些人更喜欢改成static,以充分表明该方法不会触及状态。

        我个人会选择private

        【讨论】:

          猜你喜欢
          • 2017-06-17
          • 2012-07-14
          • 1970-01-01
          • 2010-11-04
          • 1970-01-01
          • 1970-01-01
          • 2022-11-20
          • 2014-07-20
          • 2017-05-23
          相关资源
          最近更新 更多