2012-09-25 4 views
6

Wie wir wissen, unterstützt .Net keine Mehrfachvererbung. Somit können wir nur eine Klasse erben. Aber jede Klasse erbt standardmäßig die Objektklasse. Warum passiert also kein Fehler, wenn ich eine andere Klasse erben?Warum Objekt (Root) -Klasse nicht mehrere Vererbung kollidiert

Zum Beispiel A-Basisklasse, B- abgeleitete Klasse. Wenn ich A: B verwende, implizit Objektklasse auch geerbt werden, wie (glaube ich) A: B, Objekt. Wie kann es möglich sein, wenn .Net keine Mehrfachvererbung unterstützt.

+2

Denken Sie an das Objekt als das große Elternteil jeder anderen Klasse. Klasse A ist das Kind, Klasse B ist das Enkelkind. B hat nur 1 Elternklasse, die A ist. Objekt ist Bs Elternteil. – shahkalpesh

Antwort

13

Nein, es ist nicht so - es gibt nur eine Vererbungskette, die sein würde:

__________ 
| Object | 
---------- 
    ^
    | 
__________ 
| A | 
---------- 
    ^
    | 
__________ 
| B | 
---------- 

Jede Klasse hat nur eine direkte Basisklasse, aber die Vererbungskette der Klassen kann lang sein.

Als Beispiel dafür, warum diese nicht die gleichen wie B direkt von A vererben, wenn A überschreibt ToString, die ursprüngliche Implementierung von Object.ToString() Aufruf keine Möglichkeit B gibt es - es kann A ‚s nur Aufruf Version (und überschreiben natürlich ToString selbst).

3

Es ist einfach, die deklarierte Klasse nur erbt von object, wenn es nicht von einer anderen Klasse erbt. Was der Compiler tut, ist, dass sie sich ändert effektiv

public class MyBaseLessClass 
{ 
} 

zu

public class MyBaseLessClass : object 
{ 
} 

so dass jeder und jede Klasse genau eine Klasse hat es erbt. (ein bisschen wie die barber paradox :))