2012-09-25 6 views
6

Jak wiemy .Net nie obsługuje dziedziczenia wielokrotnego. W ten sposób możemy odziedziczyć tylko jedną klasę. Ale każda klasa domyślnie dziedziczy klasę obiektu. więc dlaczego nie wystąpi błąd, gdy dziedziczę inną klasę.Dlaczego klasa obiektów (root) nie koliduje z wieloma dziedziczeniami?

Na przykład A- Klasa podstawowa, B- Klasa pochodna. Kiedy używam A: B, niejawnie klasa obiektu również dziedziczona jest jako (myślę) A: B, Obiekt. Jak to możliwe, jeśli .Net nie obsługuje wielokrotnego dziedziczenia.

+2

Pomyśl o Object jako o wielkim rodzicu każdej innej klasy. klasa A jest dzieckiem, klasa B jest wielkim dzieckiem. B ma tylko jedną klasę nadrzędną, która jest obiektem A i jest głównym rodzicem B. – shahkalpesh

Odpowiedz

13

Nie, to nie jest tak, że - jest tylko jeden łańcuch dziedziczenia, które byłyby:

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

Każda jedna klasa ma tylko jeden bezpośredni klasy bazowej, ale łańcuch dziedziczenia klas może być długa.

Jako przykład, dlaczego ten nie jest taka sama jak B dziedziczy bezpośrednio od A, jeśli A nadpisania ToString, nie ma mowy o B wywołanie oryginalne wykonanie Object.ToString() - może on tylko połączeń A „s wersja (i oczywiście przesłonęć ToString).

3

To proste, deklarowana klasa tylko dziedziczy po object, jeśli nie dziedziczy z innej klasy. Co robi kompilator jest to, że skutecznie zmienia

public class MyBaseLessClass 
{ 
} 

do

public class MyBaseLessClass : object 
{ 
} 

tak, że każda klasa ma dokładnie jeden klasa dziedziczy z. (trochę jak barber paradox :))

Powiązane problemy