Выполнение конструктора из родительского класса в дочерний класс - PullRequest
0 голосов
/ 07 марта 2020

В каких ситуациях я должен выполнять конструктор родительского класса для дочернего класса? И зачем использовать «базовое» зарезервированное слово?

Например:

enter image description here

enter image description here

Ответы [ 2 ]

0 голосов
/ 07 марта 2020

Конструктор базового класса всегда вызывается. Или, точнее, один конструктор базового класса. Если вы не укажете, какой из них (используя зарезервированное слово base), вызывается конструктор по умолчанию базового класса (то есть тот, у которого нет аргументов). Если базовый класс не имеет конструктора без аргументов, возникает ошибка компилятора. С ключевым словом base вы указываете, что хотите вызвать определенный конструктор. Вот несколько простых примеров:

public class Base 
{
    private int _a;
    public Base() // default ctor
    {_a = 0;}
    public Base(int a) // a ctor with an argument
    {_a = a;}
}

public class Derived : Base
{
    public Derived() : base(2) // call the ctor with argument "2"
    {}
    public Derived(bool b) // uses the ctor without argument of the base class (_a will stay 0)
    {
    }
}

Ключевое слово base здесь используется в качестве заполнителя c для имени базового класса. Единственное другое синтаксически допустимое слово - this (если вы хотите вызвать конструктор того же класса )

0 голосов
/ 07 марта 2020

Если вы не используете: базовое слово для дочернего конструктора.

Будет выполнен конструктор по умолчанию для родителя.

Если у вас есть базовый c construnctor в базовом классе, и у вас есть некоторые поля в нем и хотите заполнить его с помощью конструктора basi c, вы должны использовать ключевое слово base.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...