У меня есть несколько типов, которые происходят от упрощенного 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)
{
}
}
[Изменить]
Похоже, что то, что предложил Ян Куигли в своем ответе 1019 *, казалось, имело смысл.
Если бы у меня был вызов, который инициализирует валидаторы, 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() {}
}