【问题标题】:c# - static method or not, which one is the best? [closed]c# - 静态方法与否,哪一个是最好的? [关闭]
【发布时间】:2015-09-06 02:34:23
【问题描述】:

我知道有一些帖子,但我没有找到我正在寻找的答案,而且很简单。

我知道是否调用静态方法(实例化 (OOP))。

示例,使用静态:

using System;

namespace Projet_Test
{
    class surfacesCalcul
    {
        public static int calc_air(int a, int b){
            int result = a * b;

            return result;
        }
    }

    /*
     * ##########################
     * ##########################
     */

    class MainClass
    {
        public static void Main (string[] args)
        {
            Console.WriteLine(surfacesCalcul.calc_air(4,5));
        }
    }
}

您调用类(surfacesCalcul).Method,您可以访问该方法。

--

正常,使用 OOP:

using System;

namespace Projet_Test
{
    class surfacesCalcul
    {
        public int calc_air(int a, int b){
            int result = a * b;

            return result;
        }
    }

    /*
     * ##########################
     * ##########################
     */

    class MainClass
    {
        public static void Main (string[] args)
        {
            surfacesCalcul calculMeThis = new surfacesCalcul();

            Console.WriteLine(calculMeThis.calc_air(4,5));
        }
    }
}

您创建一个实例化,然后您可以访问类中的方法。

--

[我的问题] 哪个是最好的,我只是想知道为什么使用静态方法而不是实例或逆方法。有没有真正的原因或两者都是好的。是否有一个比另一个多使用一个的最佳时间?

【问题讨论】:

  • 简单地说,静态方法被称为类名ClassName.StaticMethod()。你不能从一个实例中调用它们
  • 每当出现此类问题时,我的建议是:考虑依赖注入优于静态方法。如果 [pure] 方法是 private 那么..这是一个不同的问题。
  • 是什么让您如此确定它就像“静态或非静态”一样简单?如果就这么简单,你肯定已经找到答案了吗?
  • @RadioSpace 是的,我知道这一点。抱歉,如果我的帖子不清楚,但这就是我所说的。我只是想知道为什么使用静态方法而不是实例或逆方法。有没有真正的原因或两者都是好的。有没有比另一个多使用一个的最佳时间? - 我会更新我的问题
  • 我更喜欢在可能的情况下使用静态,而不是在不可能的情况下使用静态。我不创建实例化。所以这取决于方法

标签: c# oop methods static


【解决方案1】:

我会争论双方,你可以选择。

考虑使用静态函数的第一个示例:

namespace Projet_Test
{
    class surfacesCalcul
    {
        public static int calc_air(int a, int b){
            int result = a * b;

            return result;
        }
    }

    /*
     * ##########################
     * ##########################
     */

    class MainClass
    {
        public static void Main (string[] args)
        {
            Console.WriteLine(surfacesCalcul.calc_air(4,5));
        }
    }
}

如果您从不关心覆盖或任何类型的继承,这很好。

现在考虑这个例子:

class surfacesCalcul
{
    public virtual int calc_air(int a, int b){
        int result = a * b;

        return result;
    }
}
class surfacesCalcul2 : surfacesCalcul {
   public override int calc_air(int a, int b)
   {
      var g = base.calc_air(a, b);
      return g*2;

   }
}

/*
 * ##########################
 * ##########################
 */

class MainClass
{
    public static void Main (string[] args)
    {
        var calculMeThis = new surfacesCalcul2();

        Console.WriteLine(calculMeThis.calc_air(4,5));
    }
}

你根本没有改变程序的“正确性”,只是允许多态性做它的事情。

这个例子对它来说真的很重要。我更喜欢带有类的路由,因为静态方法不能有实例变量,而且你不能做任何类型的依赖注入,这使得单元测试变得更加容易。对象实例化还允许不同的实例包含不同的状态信息,其中静态不能包含任何实例特定的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    相关资源
    最近更新 更多