Базовый класс должен, по дизайну, инкапсулировать функциональность, которая будет общей для всех производных классов (так как она будет унаследована ими). Если поле/свойство, которое вы инициализируете с помощью конструктора базового класса, имеет отношение к инициализации всех производных классов, то да, передача его в конструктор базового класса с помощью ключевого слова base
является правильным подходом.
В вашем случае, поскольку базовый класс является абстрактным и его единственный конструктор требует параметра, то использование ключевого слова base
фактически становится обязательным; нет другого способа инициализации экземпляра из иерархии классов.
Я предполагаю, что приведенный вами пример надуман ради вопроса. Вы должны не hard-code имя класса; Вы можете использовать GetType
метод (или is
ключевое слово) для определения фактического типа данных экземпляра во время выполнения:
MyBase x = new MyChild_One();
Console.WriteLine(x.GetType().Name); // Outputs "MyChild_One"
Для полея/свойств, значения которых никогда не изменится, вы можете также использовать абстрактное свойство только для чтения что перекрывается всеми производными классами:
abstract class MyBase
{
public abstract String l_strChildName { get; }
}
class MyChild_One : MyBase
{
public override String l_strChildName
{
get { return "MyChild One"; }
}
}
class MyChild_Two : MyBase
{
public override String l_strChildName
{
get { return "MyChild Two"; }
}
}
По сравнению с чем? –
@FyodorSoikin: Мне просто нужно знать, рекомендуется ли это практика или нет? –
Ваш вопрос очень широк - если структура позволяет вам это сделать, тогда всегда будет ситуация, в которой это уместно.Если ваш класс _needs_ 'l_strChildName' должен быть заполнен для того, чтобы функционировать, и если он будет иметь другое значение в каждом производном классе, то да, это хорошая идея, чтобы вызвать базовый конструктор, поскольку он гарантирует, что вы не можете случайно оставите важное поле неинициализированным. Однако, вероятно, хорошая идея сделать такое поле неизменным, используя ключевое слово 'readonly'. –