2015-12-09 2 views
10

В C#, когда мы создаем унаследованный объект класса, он также создает объект базового класса? Смущен, потому что он вызывает конструктор базового класса из конструктора классов детей.Создается ли объект базового класса при создании нового объекта его унаследованного класса?

Будет ли вызов конструктора базового класса из конструктора дочернего класса, создать объект базового класса?

+3

Чтобы наследовать/инициализировать элемент из базового класса, он сначала вызывает базовый конструктор, а затем дочерний конструктор. В конце концов, ваш экземпляр дочернего класса, как говорят, также является экземпляром базового класса (т. Е. Является отношением). –

+2

Нет, будет создан только один * объект. Подумайте о конструкторе как о простом «методе настройки», который выполняет свою логику для текущего объекта (экземпляр дочернего класса). – Rob

ответ

1

Нет, он не будет создавать объекты базового класса, объекты унаследованного класса могут иметь доступ к свойствам базового класса (в соответствии с уровнем защиты). так что конкретные члены (доступные для унаследованного класса) инициализируются, и объект базового класса не создается.

1

Создан только один объект, но он имеет два «слоя» - свойства и поведение базового класса, а также свойства и поведение унаследованного класса. Таким образом, в одном смысле ответ «Да, создается объект базового класса» (этот объект имеет те же свойства и поведение, что и любой другой объект базового класса), но это тот же объект, что и унаследованный класс, поэтому также верно: «Нет , базовый объект не создается ТАКЖЕ. ". Ключевым отличием является «также».

Тот факт, что один объект может казаться двумя разными вещами (или более), лежит в основе объектной ориентации. Это то, что делает его одновременно мощным и сложным.

0

Нет, объект базового класса создается не таким образом. и Когда объект дочернего класса создается, конструктор базового класса вызывается автоматически даже перед вызовом конструктора дочерних классов, поэтому я не думаю, что нам нужно вызвать конструктор базового класса из дочернего класса.

Как правило, конструктор базового класса используется для выполнения какой-либо задачи в фоновом режиме до того, как задача будет запущена дочерним классом.