2008-11-27 5 views
10

У меня есть класс BasePage который все остальные страницы выводят из:Как заставить основной конструктор вызывать в C#?

public class BasePage 

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

public BasePage() 
{ 
    // Important code here 
} 

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

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

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

ответ

24

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

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

8

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

+0

Значит ли это, что я могу удалить строку, содержащую: base()? – tjrobinson 2008-11-27 15:50:00

3

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

1

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

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