Керівництво c #, конструктори і спадкування

В ієрархії класів допускається, щоб у базових і похідних класів були свої власні конструктори. У зв'язку з цим виникає наступне резонне питання: який конструктор відповідає за побудову об'єкта похідного класу: конструктор базового класу, конструктор похідного класу або ж обидва? На це питання можна відповісти так: конструктор базового класу конструює базову частину об'єкта, а конструктор похідного класу - похідну частину цього об'єкта. І в цьому є своя логіка, оскільки базового класу невідомі і недоступні будь-які елементи похідного класу, а значить, їх конструювання має відбуватися окремо.

Якщо конструктор визначений тільки в похідному класі, то все відбувається дуже просто: конструюється об'єкт похідного класу, а базова частина об'єкта автоматично збирається його конструктором, використовуваним за замовчуванням.

Коли конструктори визначаються як в базовому, так і в похідному класі, процес побудови об'єкта дещо ускладнюється, оскільки повинні виконуватися конструктори обох класів. В даному випадку доводиться звертатися до ключового слова base. яке знаходить двояке застосування: по-перше, для виклику конструктора базового класу; і по-друге, для доступу до члена базового класу, який переховується за членом похідного класу.

де спісок_аргументов позначає будь-які аргументи, необхідні конструктору в базовому класі. Зверніть увагу на розташування двокрапки.

Давайте розглянемо приклад:

За допомогою ключового слова base можна викликати конструктор будь-якої форми, яка визначається в базовому класі, причому виконуватися буде лише той конструктор, параметри якого відповідають переданим аргументів.

А тепер розглянемо коротко основні принципи дії ключового слова base. Коли в похідному класі вказується ключове слово base, викликається конструктор з його безпосереднього базового класу. Отже, ключове слово base завжди звертається до базового класу, що стоїть в ієрархії безпосередньо над зухвалим класом. Це справедливо навіть для багаторівневої ієрархії класів. Аргументи передаються базовому конструктору в якості аргументів методу base (). Якщо ж ключове слово відсутнє, то автоматично викликається конструктор, який використовується в базовому класі за замовчуванням.

Схожі статті