Pourquoi C# ou VB.NET ne supporte pas l'héritage multiple
http://royalarun.blogspot.in/2013/05/why-c-or-vbnet-doesnt-support-multiple.html
1) La première raison est l'ambiguïté autour problème Diamond, considèrent une classe A a la méthode foo(), puis B et C est dérivé de A et a sa propre implémentation de foo() et maintenant la classe D dérive de B et C en utilisant l'héritage multiple et si nous nous référons au compilateur foo(), nous ne pourrons pas décider quel foo() il devrait invoquer. Il est également appelé problème de diamant parce que la structure de ce scénario d'héritage est similaire à 4 bord diamant, voir ci-dessous
A foo()
/\
/ \
foo() B C foo()
\ /
\/
D
foo()
À mon avis, même si l'on enlève la tête en haut de la classe diamant A et permettent plusieurs héritages nous verrons ce problème d'ambiguïté.
Parfois, si vous donnez cette raison à l'intervieweur, il demande si C++ peut supporter l'héritage multiple que pourquoi pas C# oR vb.net.Dans ce cas, je vais essayer de lui expliquer la deuxième raison que j'ai donnée ci-dessous en raison de la difficulté technique, mais plus à la conception maintenable et plus claire a été le facteur déterminant si cela peut seulement être confirmé par n'importe quel concepteur de Java et nous pouvons juste spéculer. Lien Wikipedia a une bonne explication sur la façon dont le problème d'adresse de langue différente se pose en raison de problème de diamant tout en utilisant plusieurs héritages.2) Une deuxième raison plus convaincante pour moi est que les héritages multiples compliquent la conception et créent un problème lors de la conversion, du chaînage de constructeurs etc et étant donné qu'il n'y a pas beaucoup de scénarios pour lesquels vous avez besoin de plusieurs héritages pour des raisons de simplicité. Aussi C# et évite cette ambiguïté en supportant l'héritage unique avec des interfaces. Puisque l'interface n'a qu'une déclaration de méthode et ne fournit aucune implémentation, il n'y aura qu'une seule implémentation de méthode spécifique, donc il n'y aurait pas d'ambiguïté.
Vous l'entendrez probablement parler de C# parce que C# est plus proche de C++ où MI est supporté. D'un autre côté, l'un des principaux objectifs de VB en tant que langage de programmation était la simplicité plutôt que la complexité, de sorte que la plupart des programmeurs ne s'attendaient pas à ce que VB supporte MI. –