|
|
1
14
它不是在clr中实现的,因此在vb.net等符合cls的语言中不可用。微软的工程师们,包括首席架构师anders hejlsberg,似乎达成了一个普遍的共识,即潜在的好处不值得实现的成本和复杂性。当时.NET团队的杰出工程师Chris Brumme早在2004年就说过:
[ Link ] 底线是我不会屏住呼吸。 现在,通过继承多个接口并将实现委托给包含的类实例,您可以获得多实现继承的一些好处(如果不是大多数好处的话)。这是一个多一点的工作,但它是我们现在最好的。 我还应该注意到,我在几年内编写了C++全职,并且在我自己的设计中只使用了多次继承。当我需要它的时候,它很方便,但老实说,我发现自己并不经常希望它在C。 |
|
2
4
所有dotnet语言都共享一个公共类型系统,cts不支持多重继承。像vb或c这样的特定语言不能单独添加它,它将与dotnet的其他部分不兼容。一种语言最多可以选择忽略/隐藏这样的功能。 我不知道为什么不包括它,但值得注意的是,大多数语言都不支持它。我只知道C++,而基本应用程序是简单的,有时是有用的,它也带来了一系列特殊的语法和规则。不是每个人都认为这值得。 |
|
|
3
2
缺少mi(多重继承)与语言设计和目标主机(clr)有很大关系: 1)mi/si的差异是 如此基本 对于一种很难(或可能不可能)在以后“将其作为功能添加”的语言来说。 2)对于预期的主机:当它 将 可以为CLR编写一种MI语言(就像为CLR编写一种具有连续性的语言一样——这是可以做到的)是这样做的, 你失去了互操作性 与所有其他“.net”语言一起使用。 一种更简单的“mi”形式可以被更新到clr中,它是通过编译时mro折叠来处理的特性(这就是如何 Scala 支持jvm上的特征)。然而,这仍然需要 专业 重新设计/重新思考语言,对于像vb(.net)这样经过“审查”的东西,祝你好运:-)在对语言进行改进时,必须确保它能很好地处理现有代码是一件大事。 |
|
|
4
0
有许多其他的技术被证明远远优于mi,比如构图。即使在支持C++的C++语言中,实际看到一个类从两个非抽象基类中继承继承是非常罕见的。 |
|
|
5
0
为什么c或vb.net不支持多重继承 http://royalarun.blogspot.in/2013/05/why-c-or-vbnet-doesnt-support-multiple.html 1)第一个原因是diamond问题的模糊性,假设一个类a有foo()方法,然后b和c从a派生,并且有自己的foo()实现,现在d类使用多重继承从b和c派生,如果我们只引用foo()编译器将无法决定哪个foo()iT应该调用。这也被称为diamond问题,因为这个继承场景的结构类似于4edge diamond,请参见下面
在我看来,即使我们删除了diamond类a的顶部头部并允许多个继承,我们也会看到这个模棱两可的问题。 有时,如果你给面试官这个理由,他会问C++是否能支持多重继承,而不是为什么不支持C或VB.NET。在这种情况下,我会尝试向他解释我在下面给出的第二个原因,那不是因为技术上的困难,而是更多的是可维护的和更清晰的设计。驱动因素虽然这只能由Java设计器中的任何一个确认,我们可以推测。wikipedia link对使用多个继承时由于diamond问题而产生的不同语言地址问题有一些很好的解释。 2)对我来说,第二个也是更令人信服的原因是,多重继承确实会使设计复杂化,并在转换、构造函数链接等过程中产生问题,而且考虑到需要多重继承的场景并不多,为了简单起见,明智的决定是省略它。同时,通过支持带有接口的单继承来避免这种不确定性。由于接口只有方法声明,并且不提供任何实现,因此只有一个特定方法的实现,因此不会有任何歧义。 |
|
|
6
0
假设类型
|
|
|
Silverspur · “X是Y的模糊基”:多重继承噩梦 8 年前 |
|
|
Aedoro · 扩展多个类的C++函数参数 8 年前 |
|
|
user6022430 · Python3.4多重继承调用特定构造函数 10 年前 |
|
|
Mark van der Wilk · 用于重写继承方法的Mixin 10 年前 |
|
pasha · 是否可以为复制基的虚拟函数提供不同的定义? 10 年前 |
|
|
Daniel · 如何使继承从父类到子类python34起作用 10 年前 |