【问题标题】:Should a class with only static methods be static? [closed]只有静态方法的类应该是静态的吗? [关闭]
【发布时间】:2016-04-05 11:08:12
【问题描述】:

我有一个只有静态方法的类。类本身也应该是静态的吗?有关系吗?

【问题讨论】:

  • 这里没有对错之分,但很可能是的,您应该将其设为静态,因为这样做毫无意义new YourClass()
  • @LasseV.Karlsen YourClass 不必是 static 才能执行 YourClass.doSomething();。只有doSomething() 必须是static
  • @Guy 确实,但是 Lasse 只是说仅使用静态方法实例化某些东西是没有意义的,因此它可能无论如何都应该是静态的。
  • 有一个特殊的场景,类需要是静态的,那就是使用扩展方法时。
  • 另一个使用 static 的原因是利用 using static,因此您不必在 C# 6 中使用类名来限定方法。

标签: c# static


【解决方案1】:

重要吗?

如果用户尝试这样做,则将类设为静态可确保永远不会通过生成编译器错误来实例化它。如果仅由静态成员组成的类根本不打算实例化,则没有理由不将其设为静态。您可以选择不这样做,但此类的实例不会很有用,而且创建这些实例的用户会很困惑。

另一方面,如果您打算创建此类的实例,但您希望派生类实现自己的实例成员,则此类可能应该是抽象的,而不是静态的(也许这些实例成员应该通过抽象定义或接口预先声明)。

【讨论】:

    【解决方案2】:

    一般来说:是的。

    您可以通过创建类static 来阻止程序员创建某个类的对象实例。如果这是你想要的,那就去做吧。这可以通过显示(其他同事等)该类不打算实例化来防止错误。


    public static class A 
    {
      // Some static member
    }
    

    A a = new A(); // Compilation error
    

    【讨论】:

      猜你喜欢
      • 2010-10-18
      • 2014-04-12
      • 2010-11-21
      • 1970-01-01
      • 2012-09-04
      • 1970-01-01
      • 2011-06-23
      • 2011-01-17
      • 1970-01-01
      相关资源
      最近更新 更多