У меня есть несколько типов, которые основаны на упрощенном Base
, как показано ниже.Перегрузка «базового» конструктора или «этого» конструктора?
Я не уверен, использовать конструктор базового класса или конструктор this
при перегрузке конструкторов.
ConcreteA
перегружает Конструкторы чисто с помощью base
конструкторов, в то время как
ConcreteB
перегрузок с использованием this
в течение первых двух перегрузок.
Что было бы лучшим способом перегрузки конструкторов?
public abstract class Base
{
public string Name { get; set; }
public int? Age { get; set; }
protected Base() : this(string.Empty) {}
protected Base(string name) : this(name, null) {}
protected Base(string name, int? age)
{
Name = name;
Age = age;
}
}
public class ConcreteA : Base
{
public ConcreteA(){}
public ConcreteA(string name) : base(name) {}
public ConcreteA(string name, int? age) : base(name, age)
{
}
}
public class ConcreteB : Base
{
public ConcreteB() : this(string.Empty, null){}
public ConcreteB(string name): this(name, null){}
public ConcreteB(string name, int? age) : base(name, age)
{
}
}
[Редактировать] Похоже, что Ян Куигли предложил в своем answer казалось, имело смысл. Если бы мне нужно было вызвать инициализацию валидаторов, ConcreteA(string)
никогда не будет инициализировать валидаторы в следующем случае.
public class ConcreteA : Base
{
public ConcreteA(){}
public ConcreteA(string name) : base(name) {}
public ConcreteA(string name, int? age) : base(name, age)
{
InitializeValidators();
}
private void InitializeValidators() {}
}
Это, похоже, имеет смысл, если я буду иметь другие инициализации в конкретных конструкторах. – Sung
Да, и «это» всегда будет называться «база» в конце дня. Поэтому, даже если «это» ничего не делает, оно упадет до «базы», –