重载"base"构造函数或"this"构造函数?

dan*_*die 7 .net c# overloading constructor-overloading

我有几种类型来自简化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)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

[编辑] 看起来Ian Quigley在他的回答中建议的似乎是有道理的.如果我要进行初始化验证器的调用,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() {}
}
Run Code Online (Sandbox Code Playgroud)

Dea*_*unt 5

这个.因为如果你在ConcreteB(string,int?)中放置代码,那么你希望字符串只有构造函数来调用它.