原始问题
考虑以下场景:
public abstract class Foo
{
public string Name { get; set; }
public Foo()
{
this.Name = string.Empty;
}
public Foo(string name)
{
this.Name = name;
}
}
public class Bar : Foo
{
public int Amount { get; set; }
public Bar()
: base()
{
this.Amount = 0;
}
public Bar(string name)
: base(name)
{
this.Amount = 0;
}
public Bar(string name, int amount)
: base(name)
{
this.Amount = amount;
}
}
有没有更优雅的链接结构的方法,这样它们之间就没有代码重复了?在此示例中,我最终不得不复制代码以将Bar.Amount属性的值设置为第二个构造函数中的amount参数的值。随着类中变量数量的增加,构造的排列可能会变得相当复杂。它只是闻起来很有趣。
我确实筛选了关于这个问题的搜索的前几页,但我没有得到具体的结果;对不起,如果这是旧帽子。
提前致谢。
更新
所以后来我在考虑它,下面应该是我的方法:
public abstract class Foo
{
public string Name { get; set; }
public string Description { get; set; }
public Foo()
: this(string.Empty, string.Empty) { }
public Foo(string name)
: this(name, string.Empty) { }
public Foo(string name, string description)
{
this.Name = name;
this.Description = description;
}
}
public class Bar : Foo
{
public int Amount { get; set; }
public bool IsAwesome { get; set; }
public string Comment { get; set; }
public Bar()
: this(string.Empty, string.Empty, 0, false, string.Empty) { }
public Bar(string name)
: this(name, string.Empty, 0, false, string.Empty) { }
public Bar(string name, int amount)
: this(name, string.Empty, amount, false, string.Empty) { }
public Bar(string name, string description, int amount, bool isAwesome, string comment)
: base(name, description)
{
this.Amount = amount;
this.IsAwesome = isAwesome;
this.Comment = comment;
}
}
非常感谢您的回复。