为什么不能将静态类继承到普通类?C#继承和静态类
C#继承和静态类
回答
若B从继承(是的子类)A,这意味着B的一个实例可以被存储在类型A的变量,并将其虚拟方法将调用那些类B.
的对于静态类,你没有这个类的实例的概念,所以没有办法继承。对于普通类的静态(单例)引用,你可能会有更好的运气。因此
从Static Classes and Static Class Members (C# Programming Guide)
创建一个静态类是 基本相同,创建一个只包含静态成员和 私有构造函数的类 。私有的 构造函数阻止实例化来自 的类。使用静态类的 的优点是 编译器可以检查以确保没有实例成员 被意外添加。编译器将保证 该类的实例不能被创建为 。
静态类是密封的,因此 不能被继承。他们 不能继承任何类,除了 对象。静态类不能包含 一个实例构造函数;然而,他们 可以包含一个静态构造函数。
作为从静态类继承的替代方法,可以将扩展方法分配给接口。
这实际上是通过设计。似乎没有理由继承静态类。它具有公共静态成员,您可以随时通过类名称本身进行访问。我见过的继承静态东西的唯一原因是坏的,比如保存了几个键入的字符。
可能有理由考虑将静态成员直接带入范围的机制(我们实际上会在Orcas产品周期后考虑这一点),但静态类继承并不是可行的方法:使用,并且仅适用于发生在静态类中的静态成员。
(的Mads托格森,C#语言PM)
的副本请提一下,有一个确切的SO重复的问题,而不是复制从重复获胜的答案。 – 2009-12-23 06:25:16
不能继承静态类 - 原因很简单。 静态类被标记为抽象并且被编译的IL封装,它既不能被实例化,也不能被继承。
- 1. 静态类和继承
- 2. 继承静态类
- 3. 继承和存储静态类信息
- 4. 打字稿类:静态和继承
- 5. 静态变量在基类和继承
- 6. 基类和继承的静态属性
- 7. 继承和静态属性
- 8. 静态新建和继承
- 9. 继承和静态变量
- 10. Ruby静态继承
- 11. 从抽象类继承的静态类?
- 12. C++私有继承和静态成员/类型
- 13. PHP:子类静态继承 - 子类共享静态变量?
- 14. 静态方法的继承和静态变量继承有何不同?
- 15. c#继承,静态全局存储
- 16. C#中的静态成员继承
- 17. C++ /钻石继承/静态变量
- 18. C++重写继承的静态常量
- 19. C#继承:使用静态字段?
- 20. C++继承中的静态指针
- 21. 从抽象类继承静态变量
- 22. 类变量中的Python静态继承
- 23. C++ - 派生类是否继承基类的静态成员?
- 24. 继承和多态C++
- 25. C++继承和动态库
- 26. C++继承和多态性
- 27. 调度和继承(静态还是动态类型)
- 28. 继承静态方法和字段
- 29. 静态构造函数和继承
- 30. 继承和静态工厂方法
问题没有意义。这样做没有好处。 – mquander 2009-12-23 05:54:48
+1我认为这是一个很好的问题 - 我没有想过。如果没有明显的好处,应该用语言阻止我做这件事吗?我不这么认为。 – 2009-12-23 06:03:58
http://stackoverflow.com/questions/774181/why-cant-i-inherit-static-classes – viky 2009-12-23 06:26:47