【问题标题】:Implementing static and non-static method of a class performance实现类性能的静态和非静态方法
【发布时间】:2018-03-31 10:41:39
【问题描述】:

本例的PublicMethod方法与static和non-static i写同一个方法对吗?调用非静态方法对性能有影响还是编译器会优化代码?

public class MyClass
{
  private double y;
  private double PrivateFunc(double x) { return some_operation(x,y);}

  public static double PublicFunc(MyClass A, double x)
  {
      return A.PrivateFunc(x);
  }

  public double PublicFunc(double x)
  {
      return MyClass.PublicFunc(this,x);
  }

  /* instead of repeating code of the static method
  public double PublicFunc(double x)
  {
      return PrivateFunc(this,x);
  }
  */
}

【问题讨论】:

  • 调用方法是如此之快,你永远看不到任何区别。它更多地是关于可读性。想想为什么需要静态或非静态方法。真的有必要两者兼得吗?
  • 你写的代码只不过是递归调用自己。这段代码没有用。当您调用 MyClass.PublicFunc 时,它将处于无限循环并抛出 StackOverflowException... 您是否尝试过这段代码?
  • 你首先需要了解静态方法和类方法。以及为什么应该使用它们。如果解决方案是静态方法,OOP 就不会到位。
  • @ChetanRanpariya 虽然我不同意它的实现方式,但它不是递归调用自身。它正在调用另一个静态方法,它不会抛出 StackOverflowException
  • @AhmedAbdelhameed 同意你的看法。我错过了PrivateFuncsome_operation 方法。

标签: c# static-methods compiler-optimization


【解决方案1】:

是的,有时拥有静态和非静态版本的方法很方便。 string.Equals() 是一个示例尽管此方法有静态和非静态版本don't share the exact same implementation

但是,为什么您认为在这种情况下您需要该方法的私有版本?

您可以简单地实现它而无需私有方法,如下所示:

public class MyClass
{
    private double y;

    public static double PublicFunc(MyClass A, double x)
    {
      return A.PublicFunc(x);
    }

    public double PublicFunc(double x)
    {
      // The actual implementation.
      return some_operation(x, y);
    }
}

【讨论】:

    猜你喜欢
    • 2011-01-17
    • 2011-07-11
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 2020-02-17
    • 2013-11-04
    相关资源
    最近更新 更多