【发布时间】:2014-12-27 06:53:51
【问题描述】:
我了解什么是静态类和密封类,并且我经常使用扩展方法,我只是想知道——有人知道为什么静态类在 C# 中是密封的吗?
我查看了 MSDN 和 C# 语言规范,但它从未真正说明为什么它们是密封的。
为什么我们不能从静态类继承和覆盖静态成员等?
编辑:
感谢您的回答,但您仍在谈论什么是静态类。我知道为什么我不能覆盖它的方法。但我问他们为什么会这样?
vtables 真的那么贵吗?为什么要设计一种语言,使静态类实际上是静态的?只是为了传统吗?还有其他我没有看到的优势吗?
(我偷偷怀疑我从根本上误解了静态类的意义。)
【问题讨论】:
-
你不能覆盖任何静态成员,即使类不是静态的;你只能隐藏它们...为什么不使用像单例这样的设计模式来替代成员(因为它是静态实例,而不是类)或其他设计模式?
-
@BrianMains 这不是单例,而是零例。从来没有任何实例,而不是完全一个。
-
@Servy 我相信 Brian 建议 OP 使用单例,而不是静态类。
-
从静态类继承是没有意义的。没有实例;你不需要动态调度。您必须在编译时知道要调用哪个方法。
-
这个Why static classes declared sealed 解释了原因......但你的问题似乎更多地是关于为什么不允许继承,所以不完全重复。