2012-09-25 8 views
6

Como sabemos, .Net no admite la herencia múltiple. Por lo tanto, solo podemos heredar solo una clase. Pero cada clase hereda por defecto la clase 'objeto'. Entonces, ¿por qué no ocurre un error cuando heredo cualquier otra clase?Por qué la clase de objeto (raíz) no entra en conflicto con la herencia múltiple

Por ejemplo A- Clase base, B- Clase derivada. Cuando uso A: B, implícitamente la clase de objeto también se hereda como (creo) A: B, Object. ¿Cómo puede ser posible si .Net no admite herencia múltiple?

+2

Piense en Object como el padre principal de cualquier otra clase. la clase A es el niño, la clase B es el gran niño. B tiene solo 1 clase principal que es A y el objeto es el abuelo principal de B. – shahkalpesh

Respuesta

13

No, no es así - sólo hay una cadena de herencia, lo que sería:

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

Cualquier una clase sólo tiene una clase base directa, pero la cadena de herencia de clases puede ser largo.

Como un ejemplo de por qué este no es lo mismo que B que hereda directamente de A, si A anulaciones ToString, no hay manera de B llamando a la aplicación original de Object.ToString() - Puede única llamada A 's versión (y anular ToString sí mismo, por supuesto).

3

Es simple, la clase declarada solo hereda de object si no hereda de otra clase. Lo que el compilador hace es que efectivamente cambia

public class MyBaseLessClass 
{ 
} 

a

public class MyBaseLessClass : object 
{ 
} 

para que todos y cada clase tiene exactamente un clase que hereda de. (un poco como el barber paradox :))

Cuestiones relacionadas