Как я могу заставить базовый конструктор вызываться в C #? - PullRequest
10 голосов
/ 27 ноября 2008

У меня есть класс BasePage, из которого все остальные страницы наследуются:

public class BasePage

Этот BasePage имеет конструктор, который содержит код, который должен всегда выполняться:

public BasePage()
{
    // Important code here
}

Я хочу заставить производные классы вызывать базовый конструктор, вот так:

public MyPage
    : base()
{
    // Page specific code here
}

Как я могу применить это (желательно во время компиляции)?

Ответы [ 4 ]

25 голосов
/ 27 ноября 2008

Базовый конструктор всегда будет вызываться в какой-то момент. Если вы вызываете this(...) вместо base(...), то это вызывает другой конструктор в том же классе - который снова должен будет вызвать либо еще один родственный конструктор, либо родительский конструктор. Рано или поздно вы всегда попадете в конструктор, который либо вызывает base(...) явно, либо неявно вызывает конструктор без параметров базового класса.

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

9 голосов
/ 27 ноября 2008

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

3 голосов
/ 27 ноября 2008

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

1 голос
/ 27 ноября 2008

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

Редактировать: перефразировано для ясности.

...