2009-12-23 213 views
1

为什么不能将静态类继承到普通类?C#继承和静态类

+3

问题没有意义。这样做没有好处。 – mquander 2009-12-23 05:54:48

+2

+1我认为这是一个很好的问题 - 我没有想过。如果没有明显的好处,应该用语言阻止我做这件事吗?我不这么认为。 – 2009-12-23 06:03:58

+0

http://stackoverflow.com/questions/774181/why-cant-i-inherit-static-classes – viky 2009-12-23 06:26:47

回答

4

若B从继承(是的子类)A,这意味着B的一个实例可以被存储在类型A的变量,并将其虚拟方法将调用那些类B.

的对于静态类,你没有这个类的实例的概念,所以没有办法继承。对于普通类的静态(单例)引用,你可能会有更好的运气。因此

2

Static Classes and Static Class Members (C# Programming Guide)

创建一个静态类是 基本相同,创建一个只包含静态成员和 私有构造函数的类 。私有的 构造函数阻止实例化来自 的类。使用静态类的 的优点是 编译器可以检查以确保没有实例成员 被意外添加。编译器将保证 该类的实例不能被创建为 。

静态类是密封的,因此 不能被继承。他们 不能继承任何类,除了 对象。静态类不能包含 一个实例构造函数;然而,他们 可以包含一个静态构造函数。

0

作为从静态类继承的替代方法,可以将扩展方法分配给接口。

-1

这实际上是通过设计。似乎没有理由继承静态类。它具有公共静态成员,您可以随时通过类名称本身进行访问。我见过的继承静态东西的唯一原因是坏的,比如保存了几个键入的字符。

可能有理由考虑将静态成员直接带入范围的机制(我们实际上会在Orcas产品周期后考虑这一点),但静态类继承并不是可行的方法:使用,并且仅适用于发生在静态类中的静态成员。

(的Mads托格森,C#语言PM)

来源: Why can't I inherit static classes?

+1

的副本请提一下,有一个确切的SO重复的问题,而不是复制从重复获胜的答案。 – 2009-12-23 06:25:16

1

不能继承静态类 - 原因很简单。 静态类被标记为抽象并且被编译的IL封装,它既不能被实例化,也不能被继承