如果我有类 A、B、C、D、E
和像 X、Y、Z
这样的接口(interface),并且像这样对系统建模:
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 的实例(因为它们是接口(interface))
内存分配或 GC(ABCD)没有额外的开销,因为 E 的实例被分配为 1 个 block 。任何运行时开销都将完全取决于所涉及的构造函数。
总会有一个构造函数链(从 E 到 A)被执行,可能是默认构造函数,但也可以在一个级别调用多个构造函数。
关于c# - .NET 中具有深度继承的类的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2382634/