Perché C # non supporta l'ereditarietà multipla?

10

Anche se potrebbe essere una cattiva pratica, direi che c'è il tempo per raggiungere il suo scopo.

    
posta Amir Rezaei 09.11.2010 - 21:27
fonte

5 risposte

14

Il link copre bene questa domanda .

Il mio punto di vista è questo: i progettisti probabilmente volevano creare un linguaggio che promuovesse i principi del buon design. Ok, quindi ci sono momenti in cui l'ereditarietà multipla è perfetta. Quelli sono l'eccezione, piuttosto che la regola, però, e possono essere abusati molto facilmente. Quindi, i designer hanno deciso di renderlo impossibile da fare.

Per quei casi in cui sarebbe positivo, è necessario utilizzare le interfacce. Quelle opere, anche se goffamente; ma non ne avrai bisogno per così tanto.

    
risposta data 09.11.2010 - 21:34
fonte
8

Solo per illustrare perché no, l'ereditarietà multipla è supportata dal C ++, ma è strongmente scoraggiata dal momento che puoi realizzare la maggior parte delle cose con la composizione che faresti con M.I., comunque in un modo molto più pulito. A differenza di C ++, C # non è un tipo di linguaggio OOP "ibrido", cioè non si è evoluto da una lingua precedente.

Se hai davvero bisogno di ereditarietà multipla, puoi implementare più interfacce.

    
risposta data 09.11.2010 - 21:38
fonte
6

Walter Bright è sia il creatore di D, che non include MI, e l'unica persona che abbia mai scritto un intero compilatore C ++ da solo. Secondo lui, la ragione per cui D manca di MI è che è troppo difficile creare un sistema di MI che sia allo stesso tempo efficiente, semplice e utile. Sospetto che Java e C # utilizzino un ragionamento simile. Linguaggi come Perl e Python non hanno l'efficienza come obiettivo primario, quindi hanno un sistema semplice e utile, ma difficile da implementare in modo efficiente. Il C ++ non sembra avere la semplicità come obiettivo, quindi ha creato un sistema estremamente complicato che quasi nessuno capisce.

Penso che Walter abbia ragione. Se esiste un linguaggio con un sistema MI che soddisfi abbastanza bene tutti e tre questi criteri, si prega di lasciare un commento.

    
risposta data 09.11.2010 - 22:25
fonte
3

L'ereditarietà multipla, se la si utilizza molto, si traduce in situazioni molto complesse. Troppa complessità con pochi vantaggi è il motivo per cui è stato escluso sia per Java che per C #.

    
risposta data 09.11.2010 - 22:03
fonte
-1

Perché i progettisti linguistici apparentemente volevano produrre un C ++ migliore, non una lingua migliore in generale. (Quanto successo potevano essere discusso.)

C ++ - l'ereditarietà multipla dello stile ha alcuni problemi, e quindi le persone derivate dal C ++ generalmente lo omettono (Java, C #, D). Altre lingue, Eiffel e Common Lisp come due, lo fanno in modo diverso e non sembrano avere gli stessi problemi.

    
risposta data 09.11.2010 - 23:38
fonte

Leggi altre domande sui tag