为什么vb.net不支持多重继承?

yam*_*pog 1 .net vb.net history multiple-inheritance

我已经看到一些讨论为什么c#没有实现多重继承,但很少讨论为什么它不支持在vb中.我知道c#和vb都被编译成中间语言,所以他们都需要共享类似的限制.

VB中缺少多重继承似乎是网点缺乏功能的一个原因.有谁知道为什么VB不支持多重继承?我希望有一些历史课和讨论为什么从未考虑过VB.

Tom*_*ski 14

它没有在CLR中实现,因此它不适用于像VB.NET这样的CLS兼容语言.微软的工程师似乎已经达成了普遍的共识,包括C#首席架构师Anders Hejlsberg,潜在的好处不值得实施的成本和复杂性.Chris Brumme是当时.NET团队的杰出工程师,他在2004年说过:

有几个原因我们没有提供多个实现继承的可编程,可验证,符合CLS的版本:

  1. 不同的语言实际上对MI的工作方式有不同的期望.例如,如何解决冲突以及重复的基数是合并还是冗余.在我们在CLR中实现MI之前,我们必须对所有语言进行调查,找出常见概念,并决定如何以语言中立的方式表达它们.我们还必须决定MI是否属于CLS,这对于不想要这个概念的语言(例如VB.NET)意味着什么.当然,这是我们作为公共语言运行时所处的业务,但我们还没有为MI做这件事.

  2. MI真正合适的地方实际上非常小.在许多情况下,多个接口继承可以完成工作.在其他情况下,您可以使用封装和委派.如果我们要添加一个稍微不同的构造,比如mixins,那实际上会更强大吗?

  3. 多实现继承为实现注入了很多复杂性.这种复杂性会影响投射,布局,调度,现场访问,序列化,身份比较,可验证性,反射,泛型以及许多其他地方.

目前还不清楚这个功能是否能够收回成本.这是我们经常被问到的事情.这是我们没有尽职尽责的事情.但我的直觉告诉我,在我们进行了深入检查后,我们仍然会决定不使用该功能.

[ 链接 ]

底线是我不会屏住呼吸.

目前,通过继承多个接口并将实现委托给包含的类实例,您可以获得多个实现继承的一些(如果不是大多数)好处.这是一个更多的工作,但它是我们现在最好的.

我还应该注意到,我写了几年C++全职,并且在我自己的设计中只使用了多次继承.当我需要它时它很方便,但说实话,我并不常常在C#中找到它.