Tengo algunos tipos que se derivan de simplificado Base
como se muestra a continuación.¿Constructor de "base" de sobrecarga o "este" constructor?
No estoy seguro de si usar el constructor de la clase base o el constructor this
al sobrecargar constructores.
ConcreteA
sobrecargas constructores puramente usando base
constructores, mientras
ConcreteB
sobrecargas usando this
para los dos primeros sobrecargas.
¿Cuál sería una mejor forma de sobrecargar constructores?
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)
{
}
}
[Editar] Parece que lo que Ian Quigley ha sugerido en su answer parecía tener sentido. Si recibiera una llamada que inicialice los validadores, ConcreteA(string)
nunca inicializará los validadores en el siguiente caso.
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() {}
}
Esto parece tener sentido si tuviera que realizar otras inicializaciones en constructores de hormigón. – Sung
Sí, y "esto" siempre llamará "base" al final del día. Entonces, incluso si "esto" no hace nada, se reducirá a "base" –