这篇MSDN文章指出,静态类应该声明为sealed和abstract。我原本认为静态类已经是sealed的了。为什么还需要将静态类声明为sealed呢?
“如果你所使用的编程语言没有内置静态类的支持,那就将静态类声明为sealed和abstract,并添加一个私有实例构造函数。”
请记住,.NET框架支持许多不同的编程语言。
C# v1不允许在类上使用“static”关键字。因此,如果您有一个仅包含静态方法的类,建议将其声明为“sealed”,“abstract”并将构造函数设置为私有。这意味着没有人可以实例化您的类或尝试从它继承。【从仅具有静态方法的类继承没有意义。】
C# v2允许在类上使用静态关键字,因此您不必使用以上技巧来强制正确使用。
abstract
关键字的一个效果是将类标记为抽象类,因此该类不能被实例化。sealed
关键字的一个效果是将类标记为密封类,因此该类不能被继承。static
类实际上就是这样的一种类——既不能被实例化,也不能被继承。
因此,文章并没有说您应该将静态类标记为abstract
和sealed
,但这是静态类在IL中表示的方式。
(其他语言可能会允许您这样做,如果它们没有static
关键字,但我怀疑这一点,因为abstract sealed
类在语义上并不合理。)
它似乎在说,如果语言不支持静态类,则将一个类声明为密封和抽象的,并使用私有构造函数是静态类的替代方案。