ПОНЯТНО О Visual Basic NET (том 3)


Конструкторы родителя и наследников - часть 3


        Dim Коробка1 As New clsКоробка

показывает, что для создания объекта Коробка1 мы выбрали из двух конструкторов класса clsКоробка тот, что без параметра.

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

В подтверждение этих слов вы видите две напечатанные строки:

Сработал конструктор прямоугольника без параметров.

Сработал конструктор коробки без параметров.

Когда вызывается конструктор родителя, то он первым делом вызывает конструктор своего родителя, тот – своего, и так далее до самого отдаленного предка.

Теперь обратите внимание на рождение объекта Параллелепипед. В коде класса clsПараллелепипед никакого конструктора нет – и тем не менее конструктор родителя был вызван, в подтверждение чего была напечатана строка

Сработал конструктор прямоугольника без параметров.

Не забывайте об этом неявном вызове.

Вы можете, если захотите, из кода конструктора наследника явно вызвать один из конструкторов родителя. Мы так сделали при создании объекта Коробка2. Здесь нам это понадобилось для того, чтобы длина и ширина могли получить исходные значения. Для этого из конструктора с параметром класса clsКоробка оператором

        MyBase.New(3, 2)

вызывается конструктор его родителя, класса clsПрямоугольник. Этот вызов вы должны писать в коде конструктора первой строкой.

Есть ситуация, когда явный вызов родительского конструктора вы делать обязаны. Если в коде родителя нет конструктора без параметров, но есть конструкторы с параметрами, то первой строкой в коде конструкторов наследников должен стоять вызов одного из конструкторов родителя.

Отличия конструктора от обычной процедуры. Несмотря на то, что процедура конструктора не отличается в коде класса от обычной процедуры, имеются и существенные различия в ее использовании в качестве процедуры. Вот два из них:

  • Обращаться к конструктору можно только из конструкторов.
  • Конструкторы не наследуются.




Начало  Назад  Вперед



Книжный магазин