[英]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.