我有几个不需要任何州的课程。从组织的角度来看,我想把它们放到层次结构中。但似乎我无法为静态类声明继承。像这样的东西:public static class Base{}public static class Inherited : Base{}不管用。为什么语言的设计者会关闭这种可能性?
3 回答
慕婉清6462132
TA贡献1804条经验 获得超2个赞
您不能继承静态类的主要原因是它们是抽象的和密封的(这也可以防止创建它们的任何实例)。
所以这:
static class Foo { }
汇编到这个IL:
.class private abstract auto ansi sealed beforefieldinit Foo
extends [mscorlib]System.Object
{
}
三国纷争
TA贡献1804条经验 获得超7个赞
这样考虑一下:通过类型名称访问静态成员,如下所示:
MyStaticType.MyStaticMember();
如果您继承该类,则必须通过新类型名称访问它:
MyNewType.MyStaticMember();
因此,当在代码中使用时,新项目与原始项目没有关系。对于像多态这样的东西,没有办法利用任何继承关系。
也许您认为您只想扩展原始课程中的一些项目。在这种情况下,没有什么可以阻止您只使用全新类型的原始成员。
也许您想要将方法添加到现有的静态类型中。您可以通过扩展方法完成此操作。
也许您希望能够Type在运行时将静态传递给函数并在该类型上调用方法,而无需确切知道该方法的作用。在这种情况下,您可以使用接口。
所以,最后你并没有从继承静态类中获得任何东西。
- 3 回答
- 0 关注
- 749 浏览
添加回答
举报
0/150
提交
取消