Ich habe einige Typen, die von vereinfachten Base
abgeleitet sind, wie unten gezeigt.Überladen Sie "Basis" -Konstruktor oder "dieser" Konstruktor?
Ich bin nicht sicher, ob der Konstruktor der Basisklasse oder der Konstruktor this
beim Überladen von Konstruktoren verwendet werden soll.
ConcreteA
Überlastungen Konstruktoren rein Verwendung base
Konstruktoren, während
ConcreteB
Überlastungen this
für die ersten beiden Überlastungen verwendet.
Was wäre eine bessere Möglichkeit, Konstruktoren zu überlasten?
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)
{
}
}
[Bearbeiten] Es sieht aus wie das, was Ian Quigley in vorgeschlagen hat seine answer schien Sinn zu machen. Wenn ich einen Anruf habe, der Validatoren initialisiert, wird ConcreteA(string)
niemals die Validatoren im folgenden Fall initialisieren.
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() {}
}
Dies scheint sinnvoll zu sein, wenn ich in konkreten Konstruktoren andere Initialisierungen durchführen würde. – Sung
Ja, und "dies" wird immer "Basis" am Ende des Tages nennen. Selbst wenn "dies" nichts bewirkt, wird es auf "Basis" fallen. –