Nawet jeśli mogłyby to być złe praktyki, powiedziałbym, że jest czas, aby spełnił swój cel.
.net
c#
object-oriented
Amir Rezaei
źródło
źródło
Odpowiedzi:
/programming/995255/why-is-multiple-inheritance-not-allowed-in-java-or-c ładnie obejmuje to pytanie.
Podejrzewam, że: projektanci prawdopodobnie chcieli stworzyć język promujący dobre zasady projektowania. Ok, więc czasami wielokrotne dziedziczenie jest idealne. Są to jednak wyjątki, a nie reguły, i można je bardzo łatwo nadużywać. Tak więc projektanci postanowili uniemożliwić.
W przypadkach, w których byłoby dobrze, musisz użyć interfejsów. Ci działają, choć niezdarnie; ale nie będziecie ich tak bardzo potrzebować.
źródło
Aby zilustrować, dlaczego nie, C ++ obsługuje wielokrotne dziedziczenie, ale jest mocno odradzane, ponieważ większość rzeczy można osiągnąć za pomocą kompozycji, którą zrobiłbyś z MI, ale w znacznie czystszy sposób. W przeciwieństwie do C ++, C # nie jest językiem OOP typu „hybrydowego”, tzn. Nie ewoluował z poprzedniego języka.
Jeśli naprawdę potrzebujesz wielokrotnego dziedziczenia, możesz zaimplementować wiele interfejsów.
źródło
Walter Bright jest zarówno twórcą D, który nie obejmuje MI, jak i jedyną osobą, która sama napisała cały kompilator C ++. Według niego powodem braku MI jest to, że zbyt trudno jest stworzyć system MI, który jest jednocześnie wydajny, prosty i użyteczny. Podejrzewam, że Java i C # używają podobnego rozumowania. Języki takie jak Perl i Python nie mają wydajności jako podstawowego celu, więc mają system, który jest prosty i użyteczny, ale trudny do wdrożenia. C ++ nie wydaje się mieć prostoty jako celu, dlatego stworzył bardzo skomplikowany system, który prawie nikt nie rozumie.
Myślę, że Walter ma rację. Jeśli istnieje jakikolwiek język, który ma system MI, który spełnia wszystkie trzy z tych kryteriów w miarę dobrze, proszę zostawić komentarz.
źródło
Wielokrotne dziedziczenie, jeśli używasz go często, powoduje bardzo złożone sytuacje. Zbyt duża złożoność, z niewielkimi korzyściami, została wykluczona zarówno dla Java, jak i C #.
źródło
Ponieważ projektanci języków najwyraźniej chcieli stworzyć lepszy C ++, a nie lepszy ogólnie język. (Jak sukcesy mogą być przedmiotem dyskusji.)
Wielokrotne dziedziczenie w stylu C ++ ma pewne problemy, dlatego ludzie wywodzący się z C ++ zazwyczaj go pomijali (Java, C #, D). Inne języki, Eiffel i Common Lisp, by wymienić dwa, robią to inaczej i nie wydają się mieć takich samych problemów.
źródło