Наследование конструкторов - PullRequest
6 голосов
/ 03 апреля 2011

Я пытался понять, но все еще не уверен.Если в базовом классе есть конструктор, производные классы всегда будут его вызывать?Я знаю, что они могут переопределить его (здесь не правильный термин, я знаю - я имею в виду добавить код к своим конструкторам), но я предполагаю, что если конструктор определен в базовом классе, производные вызовут его всегда.Это правда?

Ответы [ 2 ]

6 голосов
/ 03 апреля 2011

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

class Parent {
    public Parent() {}
    public Parent(int x) {}
}

class Child : Parent {
    public Child(int x) : base(x) {
    }
}

Если существует no конструктор без параметров,Вы будете вынуждены сделать это:

class Parent {
    public Parent(int x) {}
}

class Child : Parent {
    // This will not compile without "base(x)"
    public Child(int x) : base(x) {
    }
}
2 голосов
/ 03 апреля 2011

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

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