Csharp/C#教程:在.NET中具有深度inheritance的类的内存分配分享


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

如果我有类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实例吗?

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

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

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

总会有一系列的构造函数(从E到A)被执行,可能是默认构造函数,但也可以在1级调用多个构造函数。

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

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

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

上述就是C#学习教程:在.NET中具有深度inheritance的类的内存分配分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1038664.html

(0)
上一篇 2022年1月26日
下一篇 2022年1月26日

精彩推荐