Sono stato un codificatore .Net (non posso dire di essere un programmatore) per 2 anni. C'è una domanda che non riesco a capire da anni, cioè come può un'istanza della classe base contenere un'istanza della classe derivata?In che modo un'istanza della classe base può contenere un'istanza della classe derivata?
Supponiamo di avere due classi:
class BaseClass
{
public A propertyA;
public B propertyB;
}
class DerivedClass :BaseClass
{
public C propertyC;
}
come è potuto accadere:
BaseClass obj = new DerivedClass()
Voglio dire, il modello di memoria di BaseClass
, non ha spazio per il propertyC appena aggiunto, così come potrebbe conserva ancora il valore della proprietà C?
D'altra parte, come potrebbe questo non può accadere:
DerivedClass obj = new BaseClass()
ho pensato che questo è il modo corretto in quanto il modello di memoria di DerivedClass
ha tutti gli spazi per la BaseClass e anche di più. Ma questo non è vero, perché?
So che sto facendo una domanda davvero stupida, ma qualcuno potrebbe darmi una risposta più dettagliata di questo? Sarebbe meglio dal punto di vista della memoria o del compilatore.
Questo è esattamente lo stesso di questa domanda qui, con una risposta molto ben scritta alla tua domanda. http://stackoverflow.com/questions/4937180/a-base-class-pointer-can-point-to-a-derived-class-object-why-is-the-vice-versa – darnir
Grazie a tutti per il vostro eccellente risposte! Ho capito :) Grazie a tutti !!! ~ – NextStep