Выделение памяти для класса, который имеет глубокое наследование в.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.

5
задан Joan Venge 4 March 2010 в 21:04
поделиться

3 ответа

Да, он будет создавать «встроенные» экземпляры A, B, C и D
Нет, он не будет создавать экземпляры X, Y и Z (поскольку они являются интерфейсами)

Нет дополнительных накладных расходов для выделения памяти или GC (ABCD), потому что экземпляр E выделяется как 1 блок. Любые накладные расходы времени выполнения будут полностью зависеть от задействованных конструкторов.

Всегда будет выполняться цепочка конструкторов (от E до A), возможно, конструктор по умолчанию, но также можно вызывать несколько конструкторов на 1 уровне.

7
ответ дан 18 December 2019 в 10:44
поделиться

Наследование расширяет тип и не создает экземпляров. У вас есть один единственный экземпляр E, который включает данные, определенные A, B, C, D и E. Он предоставляет методы и средства доступа к свойствам, определенные этими классами и интерфейсами X, Y и Z.

{{1} }
2
ответ дан 18 December 2019 в 10:44
поделиться

Будет создан один объект - экземпляр E, но который будет включать все поля, объявленные в иерархии классов. (Интерфейсы не могут объявлять поля, поэтому они не имеют отношения к данным внутри самого объекта.) Только поля (и, по общему признанию, любые атрибуты, влияющие на макет) вносят вклад в память, занимаемую объектом.

Ссылка на экземпляр E может быть «преобразована» в ссылку типа A, B, C, D, X, Y или Z как преобразование ссылки с сохранением идентичности - то есть она все равно будет ссылкой на тот же объект.

7
ответ дан 18 December 2019 в 10:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: