我一直是.Net編碼器(不能說我是程序員)2年。有一個問題我多年來無法理解,那就是基類的一個實例如何保存派生類的實例?基類的實例如何保存派生類的實例?
假設我們有兩大類:
class BaseClass
{
public A propertyA;
public B propertyB;
}
class DerivedClass :BaseClass
{
public C propertyC;
}
這怎麼可能發生:
BaseClass obj = new DerivedClass()
我的意思是,中BaseClass
內存模型,對新加入的propertyC沒有空間,所以怎麼可能它仍然擁有propertyC的價值?
在另一邊,怎麼會這樣是不可能發生的:
DerivedClass obj = new BaseClass()
我認爲這是正確的道路,因爲的DerivedClass
內存模型擁有所有的BaseClass的,甚至更多的空間。但是這不是真的,爲什麼?
我知道我在問一個非常愚蠢的問題,但有人能給我一個更詳細的答案嗎?從內存或編譯器的角度來看會更好。
這和這個問題完全一樣,對你的問題寫得很好。 http://stackoverflow.com/questions/4937180/a-base-class-pointer-can-point-to-a-derived-class-object-why-is-the-vice-versa – darnir
謝謝大家的優秀答案!我已經得到了點:)謝謝大家!!!〜 – NextStep