繁体   English   中英

在.NET中具有深度继承的类的内存分配

[英]Memory allocation for a class that has deep inheritance in .NET

如果我有类A, B, C, D, E ,以及X, Y, Z和模型等接口,那么系统就像:

class B : A, X
class C : B, Y
class D : C, Z
class E : D

如果A是一个抽象基类和E是类感兴趣,当我创建E的情况下,将它反过来创建的实例A, B, C, D, X, Y, Z除了E

如果是这种情况,这会产生巨大的性能开销吗? 不是内存,而是运行时和GC明智的。

是的,它会创建A,B,C和D的“嵌入式”实例
不,它不会创建X,Y和Z的实例(因为它们是接口)

内存分配或GC(ABCD)没有额外的开销,因为E的实例被分配为1个块。 任何运行时开销都完全取决于所涉及的构造函数。

将始终存在一系列构造函数(从E到A),可能是默认构造函数,但也可以在1级调用多个构造函数。

它将创建一个单个对象 - 一个E实例 - 但它将包括在类层次结构中声明的所有字段。 (接口不能声明字段,因此它们与对象本身内的数据无关。)只有字段(以及影响布局的任何属性,不可否认)才会对对象占用的内存产生影响。

对E实例的引用可以“转换”为类型A,B,C,D,X,Y或Z的引用,作为保持身份的引用转换 - 即它仍然是对同一对象的引用。

继承扩展了Type ,但不创建实例。 您有一个E实例,其中包含由A,B,C,D和E定义的数据。它提供了由这些类以及接口X,Y和Z定义的方法和属性访问器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM