我见过一些关于为什么 c# 不实现多重继承的讨论,但很少有人讨论为什么 vb 不支持多重继承。我知道 c# 和 vb 都被编译为中间语言,因此它们都需要共享类似的限制。
VB 中缺乏多重继承似乎被认为是 dot net 中缺乏该功能的原因之一。有谁知道为什么VB不支持多重继承?我希望能有一些历史教训并讨论为什么 VB 从未考虑过这一点。
它未在 CLR 中实现,因此在 VB.NET 等符合 CLS 的语言中不可用。 Microsoft 的工程师(包括 C# 首席架构师 Anders Hejlsberg)似乎有一个普遍共识,即潜在的好处不值得付出成本和实施的复杂性。 Chris Brumme,当时 .NET 团队的一位杰出工程师,早在 2004 年就说过这样的话:
我们没有提供内置的、可验证的、符合 CLS 的多实现继承版本有几个原因:
-
不同的语言实际上对 MI 的工作方式有不同的期望。例如,如何解决冲突以及是否合并重复碱基或冗余碱基。在 CLR 中实现 MI 之前,我们必须对所有语言进行调查,找出共同的概念,并决定如何以语言中立的方式表达它们。我们还必须决定 MI 是否属于 CLS,以及这对于不需要此概念的语言(例如 VB.NET)意味着什么。当然,这就是我们作为公共语言运行时所从事的业务,但我们还没有时间为 MI 做这件事。
-
真正适合MI的地方其实很少。在许多情况下,多个接口继承可以完成这项工作。在其他情况下,您也许可以使用封装和委托。如果我们添加一个稍微不同的结构,比如 mixins,那实际上会更强大吗?
-
多个实现继承给实现注入了很多复杂性。这种复杂性会影响铸造、布局、调度、现场访问、序列化、身份比较、可验证性、反射、泛型以及可能的许多其他地方。
目前还不清楚这个功能是否能收回成本。这是我们经常被问到的问题。这是我们还没有进行尽职调查的事情。但我的直觉告诉我,在我们进行深入检查后,我们仍然会决定不实现该功能。
[Link]
最重要的是我不会屏住呼吸。
目前,通过继承多个接口并将实现委托给所包含的类实例,您可以获得多个实现继承的一些(如果不是大部分)好处。这需要更多的工作,但这是我们目前最好的。
我还应该指出,我多年来一直全职编写 C++,并且只在自己的设计中利用了几次多重继承。当我需要它时它很方便,但说实话,我发现自己在 C# 中并不经常需要它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)