为什么抽象类不能是密封的或静态的



为什么抽象类不能是密封的或静态的?

我还对为什么在C#中将静态类声明为密封和抽象的问题感到困惑

  1. static类不能标记为sealed,因为默认情况下编译器会将其设置为sealed

    静态类是密封的,因此不能继承。

  2. static类不能标记为abstract,因为这将毫无意义。当您希望所有派生类实现逻辑的同一部分时,abstract类是有意义的。但由于static类不能派生,所以其他类不可能实现这些间隙。

    它们不能从除Object之外的任何类继承。

引用静态类和静态类成员(C#编程指南)。

C#规范对此有点详细:

110.1.1.3静态类

static类可以不包括sealedabstract修饰符。然而,请注意,由于static类不能实例化或从中派生,因此它的行为就好像它既是sealed又是abstract

您可以阅读类为sealedabstract:意味着什么

抽象类不能直接实例化,在抽象类上使用新运算符是编译时错误

密封修饰符用于防止从类派生。如果将密封类指定为另一个类的基类,则会发生编译时错误。

更新

还有一个关于你提到的查询中链接的文章的词(静态类设计)。这个问题的公认答案已经说明了。如果你仔细阅读,你可以看到:

DOstatic类声明为sealedabstract,如果您的编程语言没有内置的静态类支持,则添加一个private实例构造函数。

.NET(C#也是如此)确实内置了对静态类的支持,因此您不必(甚至不能)通过将类标记为sealedabstract来使其成为伪静态。

最新更新