class B : A
{
public B(params) : base(params)
{
//Действия
}
}
C# вызов конструктора родителя
Код:
По сути действия в таком порядке:
1) конструктор B вызывает конструктор A;
2) конструктор B выполняет собственные действия.
Мне необходимо поменять их местами, т. е.:
Код:
class B : A
{
public B(params)
{
//Заполнение данных
base(params); //Вызов конструктора родителя
}
}
{
public B(params)
{
//Заполнение данных
base(params); //Вызов конструктора родителя
}
}
Возможно ли это сделать в шарпе?
Нет, нельзя - ведь в конструкторе могуть вызываться методы этого же класса, и нельзя допустить, чтобы они обратились к данным базовых классов, которых ещё не существует.
А зачем те вообще это понадобилось вот в чем вопрос)
Конструктор это тока инициализация класса и все. Там недолжно быть ничего лишнего)
Код:
public A(parameter list)
{
// Инициализация (копирование) по parameter list (1)
// Инициализация полей (вычисление), зависящих от params (2)
}
{
// Инициализация (копирование) по parameter list (1)
// Инициализация полей (вычисление), зависящих от params (2)
}
От A унаследованы B и C, от них еще дальше B1, B2, B3... C1, C2,... и т. д.
Есть много окольных путей, интересовало, можно ли (2) оставить в базовом конструкторе, а (1) явно выполнять в конструкторах потомка.
Вроде пока выкрутился, но не очень доволен :confused:
Инициализировать поля "этого" класса можно каким угодно способом.
А вот инициализация (вызов конструктора) базового класса всегда происходит перед выполнением конструктора производного класса
Цитата: el scorpio
[...] А вот инициализация (вызов конструктора) базового класса всегда происходит перед выполнением конструктора производного класса
Я это знаю, тема и создавалась по вопросу обхода этого свойства языка.
Код:
TMyClass::TMyClass (TParams &Params): Field1 (Params.Field1), Field2 (Params.Field2), TBaseClass()
{
// Тело конструктора
}
{
// Тело конструктора
}
Но на работу конструтора базового класса предварительное объявление полей производного никак не повлияет. Так как "виртуализация" в конструкторе не работает, следовательно, обратиться к этим данным невозможно.