Почему 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 () он должен вызывать. Это также называется проблемой с бриллиантами, поскольку структура в этом сценарии наследования аналогична 4-гранному бриллианту, см. Ниже
A foo()
/ \
/ \
foo() B C foo()
\ /
\ /
D
foo()
По моему мнению, даже если мы удалим верхнюю головку алмаза класса A и допустим множественное наследование, мы увидим эту проблему двусмысленности.
Иногда, если вы даете эту причину интервьюеру, он спрашивает, может ли C ++ поддерживать множественное наследование, чем почему бы не c # oR vb.net. В этом случае я бы попытался объяснить ему вторую причину, которую я привел ниже, что это не потому, что технических трудностей, но больше в том, что ремонтопригодность и ясность дизайна были движущим фактором, хотя это может подтвердить только любой из разработчиков Java, и мы можем только предположить. Ссылка на Википедию содержит хорошее объяснение того, как возникает проблема с адресом на другом языке из-за проблемы с алмазом при использовании множественного наследования.
2) Вторая и более убедительная причина для меня заключается в том, что множественное наследование усложняет проектирование и создает проблемы во время приведения, построения конструктора и т. Д., И, учитывая, что существует не так много сценариев, для которых вам нужно множественное наследование, его мудрое решение не использовать его для ради простоты. Также c # и избегает этой неоднозначности, поддерживая одиночное наследование с интерфейсами. Поскольку интерфейс имеет только объявление метода и не обеспечивает никакой реализации, будет только одна реализация конкретного метода, следовательно, не будет никакой двусмысленности.