Почему 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) Вторая и более убедительная причина для меня заключается в том, что множественное наследование усложняет дизайн и создает проблемы во время литья, цепочки конструкторов и т. д., и, учитывая, что существует не так много сценариев, в которых вам нужно множественное наследование, его мудрое решение опустить его ради простота. Также С# и избегает этой двусмысленности, поддерживая одиночное наследование с интерфейсами. Поскольку интерфейс имеет только объявление метода и не обеспечивает никакой реализации, будет только одна реализация конкретного метода, поэтому не будет никакой двусмысленности.
person
Arun Prakash
schedule
08.11.2013