为什么静态类密封?

时间:2014-10-31 02:01:02

标签: c# oop types

我理解静态类和密封类是什么,我经常使用扩展方法,我只是想知道 - 有没有人知道为什么静态类是用C#密封的?

我已经查看了MSDN和C#语言规范,但它从未真正说过为什么它们已被密封。

为什么我们不能继承静态类并覆盖静态成员等?

修改

感谢您的回答,但您仍然在谈论静态类是什么。我知道为什么我无法覆盖它的方法。但是我问为什么他们这样做?

vtable真的那么贵吗?为什么设计一个语言,所以静态类是字面上的静态?它只是为了传统吗?我还没有看到另一个优势吗?

(我怀疑我从根本上误解了静态课程的重点。)

2 个答案:

答案 0 :(得分:8)

您无法继承静态类,因为您无法覆盖静态成员。您不能覆盖静态成员,因为覆盖成员的整个概念依赖于隐式参数类型的虚拟分派,静态成员没有隐式参数可以分派。

答案 1 :(得分:4)

封闭类意味着您不能将其用作超类。创建类static使它们无法用作基类,因为它们不能具有可覆盖的方法。因此,从静态类派生有一个值得怀疑的价值:人们可能会争辩说你可以从静态基础共享受保护的方法,但是它是一个单向的街道",因为派生类不能改变它们的功能通过提供有用的替代基础。

这将静态类的实用程序归结为类似命名空间的方法持有者及其关联的静态数据。让这些类继承其他静态类会使这个目的不那么明确,而在功能或方便性方面添加很少。