【问题标题】:Should object be created if only static methods are going to be used?如果只使用静态方法,是否应该创建对象?
【发布时间】:2013-03-08 10:14:44
【问题描述】:

如果一个类只包含静态方法,是否应该创建该类的对象以利用该类的静态方法?

例如。如果MyClass 类只包含静态方法,那么以下哪个是首选?

MyClass.MyStaticMethod(3);

MyClass mc = new MyClass(); 
mc.MyStaticMethod(3);

【问题讨论】:

  • 第二个例子甚至无法编译。

标签: c# class methods static


【解决方案1】:

如果它们是静态的,则不需要实例。您不能在 C# 中执行此操作(正确 - 您可以在 Java 中执行此操作,我认为这会让人感到困惑)。

如果你可以实例化一个实例,我会倾向于那个解决方案。如果你需要增强你的方法来维护状态,你会让这些方法变成静态的,这会给自己带来一些麻烦。

【讨论】:

  • 这不仅令人困惑,而且是非法的。编译器会抱怨第二个例子。
  • 啊。在 Java 世界中思考。会修改
【解决方案2】:

不能像这样调用静态方法:

MyClass mc = new MyClass(); 
mc.MyStaticMethod(3);

它不会编译。调用静态方法的唯一方法是,如果在实现它们的类之外调用,则在它们前面加上类型名称。

所以你只能用MyClass.MyStaticMethod(3);给他们打电话

【讨论】:

    【解决方案3】:
    MyClass.MyStaticMethod(3); is preferred.
    

    另外,您希望将类声明为静态,这样它就不会被错误地实例化并且预期用途很明确

    public static MyClass
    {
    public static Property {get;set;}
    public static MyMethod() { .... }
    }
    

    【讨论】:

      【解决方案4】:

      与其他人的回答相反:

      不能在类实例上调用静态方法。这将产生编译器错误。

      这让你的问题变得毫无意义,因为只有一个选项:

      MyClass.MyStaticMethod(3);
      

      【讨论】:

        【解决方案5】:

        不,如果只使用实例变量或方法,则不需要构造函数或创建实例

        【讨论】:

          【解决方案6】:

          静态成员与类本身相关联而不是它的对象..

          通过对象访问静态成员没有意义,错误..

          你应该通过类本身访问静态成员

          【讨论】:

            【解决方案7】:

            恕我直言,

            如果该类具有静态方法 + 实例方法,并且您认为只使用静态方法,我建议是时候重构您的代码,使用“Extract CLass”重构来生成一个类并制作它如果静态方法在数量上很重要,请使用这个静态类,而不是将静态方法与实例方法混为一谈。

            【讨论】:

              【解决方案8】:

              如果一个类只包含静态方法,最好把这个类也设为静态。

              【讨论】:

                【解决方案9】:

                如果您在类中声明所有静态方法,那么您将必须使用类名称来调用方法,即

                 MyClass.MyStaticMethod(3);
                

                是的,你不能通过创建类的对象来调用静态方法

                您不需要创建该类的对象。如果您的类不包含任何内容,那么您应该将静态方法创建为静态类。

                对于其他非静态变量或方法,您将需要该类对象。

                【讨论】:

                  猜你喜欢
                  • 2012-04-26
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-06-18
                  • 2012-06-17
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多