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)
| 归档时间: |
|
| 查看次数: |
6472 次 |
| 最近记录: |