为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
白衣染霜花 2019-08-30 18:00:48
我有几个不需要任何州的课程。从组织的角度来看,我想把它们放到层次结构中。但似乎我无法为静态类声明继承。像这样的东西: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

 {

 }


查看完整回答
反对 回复 2019-08-30
?
三国纷争

TA贡献1804条经验 获得超7个赞

这样考虑一下:通过类型名称访问静态成员,如下所示:


MyStaticType.MyStaticMember();

如果您继承该类,则必须通过新类型名称访问它:


MyNewType.MyStaticMember();

因此,当在代码中使用时,新项目与原始项目没有关系。对于像多态这样的东西,没有办法利用任何继承关系。


也许您认为您只想扩展原始课程中的一些项目。在这种情况下,没有什么可以阻止您只使用全新类型的原始成员。


也许您想要将方法添加到现有的静态类型中。您可以通过扩展方法完成此操作。


也许您希望能够Type在运行时将静态传递给函数并在该类型上调用方法,而无需确切知道该方法的作用。在这种情况下,您可以使用接口。


所以,最后你并没有从继承静态类中获得任何东西。


查看完整回答
反对 回复 2019-08-30
  • 3 回答
  • 0 关注
  • 749 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信