我已经是一个 .Net 程序员(不能说我是一个程序员)两年了。有一个问题我多年来一直不明白,那就是基类的实例如何可以持有派生类的实例?
假设我们有两个类:
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的空间甚至更多。但事实并非如此,为什么呢?
我知道我在问一个非常愚蠢的问题,但是有人能否从内存或编译器的角度给我一个更详细的答案呢?