【问题标题】:C# private method as staticC# 私有方法作为静态
【发布时间】:2013-09-06 09:42:33
【问题描述】:

将私有方法声明为静态有什么好处以及何时使用它?

我为什么要使用:

    private static string GetSomething()
    {
        return "Something";
    }

代替:

    private string GetSomething()
    {
        return "Something";
    }

【问题讨论】:

  • 提供一些上下文怎么样?这两个例子都是有效的,这取决于场景。
  • 访问器和静态修饰符是正交的概念,所以private和static之间没有关系。
  • @dtb 这三个结果没有回答我的问题!我知道静态是什么意思,但我为什么要将 PRIVATE 方法声明为 STATIC?我的类不是静态的,在我的类中使用私有静态方法的可能情况是什么?
  • @Stacked - 你知道静态是什么意思,但你明白吗?静态基本上意味着在类级别。因此,对于类的每个实例,工作方式完全相同且不需要任何特定于实例的任何方法,例如属性的值或其他东西,都可以声明为静态的。 - 对于您的示例,该方法只返回一个字符串。每个实例都是相同的字符串,并且您不使用任何特定于实例的字符串,因此可以将其声明为静态以显示明确的意图,即它未绑定到实例。

标签: c# static private


【解决方案1】:

MSDN 是这么说的

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

简而言之,这意味着会有一些性能提升。

【讨论】:

    【解决方案2】:

    您可以声明一个私有静态方法,作为向其他开发人员发出此方法不使用实例数据的信号的一种方式。

    【讨论】:

      【解决方案3】:

      考虑以下简单设计,其中私有静态具有重要意义。

      您希望隐藏一些数据(抽象)并希望在类的静态和非静态函数中使用该数据:

      考虑下面的例子:

          public class test
          {
              private static int funcValue()
              {
                  return 200;
              }
              public static void someStaticFunc()
              {
                  int x = funcValue();
              }
              public void anotherNonStaticFunc()
              {
                  int y = funcValue();
              }
          }
      

      调用:

      test t = new test();
      test.someStaticFunc();//static
      t.anotherNonStaticFunc();//non-static
      

      在上面的例子中,如果你没有将funcValue 声明为静态,你不能在静态函数someStaticFunc 中调用它,并且你希望funcValue 是私有的(抽象)。

      【讨论】:

        猜你喜欢
        • 2012-07-14
        • 2015-06-05
        • 2011-05-23
        • 2010-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多