在内存布局方面,它如何与关联的继承不同

时间:2010-11-18 06:23:14

标签: c# memory layout

我有一个基本问题, 在内存布局方面,继承如何与关联不同。

class BaseClass{
 private int i;
 public void DoSomethinG(){} 
}

class DerivedClass : BaseClass{
}

class AssocClass {
private BaseClass bClass = new BaseClass();
}

除了对私有成员的访问限制外,我相信DerivedClass和AssocClass都是相同的。 BaseClass中变量i的内存在DerivedClass和AssocClasss的大小应该相同的情况下分配。

我的假设是正确的还是我错过了一些微不足道的东西?

此致 哎呀

1 个答案:

答案 0 :(得分:2)

两者之间的内存布局不同。使用DerivedClass,来自DerivedClassBaseClass的数据将一起存储。如果没有DerivedClass的隐式实例,则不能拥有BaseClass的实例。

AssocClass引用了BaseClass的实例。这可能为null,因此可能根本没有实例。如果存在实例,则它是存储在其他位置的单独对象。例如。它可能在不同代的堆中。这也意味着实例可以独立地进行垃圾收集(前提是AssocClass的实例不引用BaseClass的实例)。