为什么我不能继承静态类?

我有几个不需要任何州的课程。从组织的角度来看,我想把它们放到层次结构中。


但似乎我无法为静态类声明继承。


像这样的东西:


public static class Base

{

}


public static class Inherited : Base

{

}

不管用。


为什么语言的设计者会关闭这种可能性?


白衣染霜花
浏览 750回答 3
3回答

慕婉清6462132

您不能继承静态类的主要原因是它们是抽象的和密封的(这也可以防止创建它们的任何实例)。所以这:static class Foo { }汇编到这个IL:.class private abstract auto ansi sealed beforefieldinit Foo  extends [mscorlib]System.Object { }

三国纷争

这样考虑一下:通过类型名称访问静态成员,如下所示:MyStaticType.MyStaticMember();如果您继承该类,则必须通过新类型名称访问它:MyNewType.MyStaticMember();因此,当在代码中使用时,新项目与原始项目没有关系。对于像多态这样的东西,没有办法利用任何继承关系。也许您认为您只想扩展原始课程中的一些项目。在这种情况下,没有什么可以阻止您只使用全新类型的原始成员。也许您想要将方法添加到现有的静态类型中。您可以通过扩展方法完成此操作。也许您希望能够Type在运行时将静态传递给函数并在该类型上调用方法,而无需确切知道该方法的作用。在这种情况下,您可以使用接口。所以,最后你并没有从继承静态类中获得任何东西。
打开App,查看更多内容
随时随地看视频慕课网APP