一个仅包含静态方法的类应该是静态的吗?

12

我有一个只包含静态方法的类。这个类本身应该也是静态的吗?这是否重要?


6
这里没有对错之分,但很可能你应该将其设为静态,因为执行new YourClass()没有意义。 - Lasse V. Karlsen
2
@LasseV.Karlsen YourClass 不必是 static 就能执行 YourClass.doSomething();。只有 doSomething() 必须是 static - Guy
@Guy确实如此,但Lasse刚才说它没有意义只使用静态方法来实例化某些东西,所以它可能应该是静态的。 - James Thorpe
3
只有在使用扩展方法时,才需要将类定义为静态。 - Siderite Zackwehdex
2
将其设置为“静态”的另一个原因是利用C# 6中的“using static”,这样您就不必使用类名限定方法。 - juharr
2个回答

11

重要吗?

将一个类设为静态可以确保它永远不会被实例化,如果用户尝试这样做,编译器会产生错误。如果这个类只包含静态成员而不能被实例化,那么就没有理由不将其设置为静态。你可以选择不这样做,但是这样的类的实例并不会非常有用,创建这些实例的用户可能会感到困惑。

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


3

一般情况下:是的。

您可以通过将类设置为 static 来防止程序员创建某个类的对象实例。如果这是您想要的,那么就这样做。这可以避免错误,通过显示(给其他同事等)该类不打算被实例化。


public static class A 
{
  // Some static member
}

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接