为什么在C#中将静态类声明为密封和抽象?
这篇MSDN文章声明静态类应声明为sealed和abstract。 我的印象是静态类已经被封存了。 为什么还需要将静态类声明为密封?
我认为该文章的相关内容是:
“ 如果您的编程语言没有内置的静态类支持,请将静态类声明为密封和抽象,并添加私有实例构造函数。 ”
请记住,.NET框架支持许多不同的语言。
C#v1在课堂上不允许使用’static’关键字。 因此,如果您的类只有静态方法,则建议将其声明为“密封”,“抽象”并将构造函数设为私有。 这意味着没有人可以实例化您的类或尝试inheritance它。 [从只有静态方法的类inheritance是没有意义的。]
C#v2允许类上的static关键字,因此您不必使用上述技巧来强制使用正确的用法。
- 将类标记为
abstract
一个影响是它无法实例化。 - 将类标记为
sealed
的效果之一是不能inheritance。
这就是static
类实际上是一个无法实例化且无法inheritance的类。
因此,本文并未声明您应将静态类标记为abstract
和sealed
,但这是静态类在IL中的表示方式。
(如果他们没有static
关键字,其他语言可能允许你这样做,虽然我对此表示怀疑,因为abstract sealed
类在语义上没有多大意义。)
它似乎是说如果语言不支持静态类,则使用私有构造函数将类声明为密封和抽象是静态类的替代。