gpt4 book ai didi

c# - 在内存布局方面,继承与关联有何不同

转载 作者:太空宇宙 更新时间:2023-11-03 11:42:58 25 4
gpt4 key购买 nike

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

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

class DerivedClass : BaseClass{
}

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

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

我的假设是否正确,还是遗漏了一些微不足道的东西?

问候,天啊

最佳答案

两者的内存布局不同。使用 DerivedClass,来自 DerivedClassBaseClass 的数据将存储在一起。如果没有 BaseClass 的隐式实例,您就无法拥有 DerivedClass 的实例。

AssocClass 引用了 BaseClass 的实例。这可能为空,因此可能根本没有实例。如果有一个实例,它是一个单独的对象,存储在其他地方。例如。它可能在不同的堆中。这也意味着实例可以独立地被垃圾收集(当然前提是 AssocClass 的实例不引用 BaseClass 的实例)。

关于c# - 在内存布局方面,继承与关联有何不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4212174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com