我经常最后写这样的课程:
public class Animal
{
public string Colour { get; set; }
public int Weight { get; set; }
public Animal(Dog data)
{
this.Colour = data.Colour;
this.Weight = data.Weight;
}
public Animal(Cat data)
{
this.Colour = data.Colour;
this.Weight = data.Weight;
}
}
Run Code Online (Sandbox Code Playgroud)
当你有很多属性和类型时,你很快就会得到很多锅炉板代码.理想情况下,在这种情况下,我只需创建一个IAnimal接口并引用它.我目前处于第三方程序集中存在Dog和Cat类的情况,我无法修改它们.我能想出的唯一解决方案是:
public class Animal
{
public string Colour { get; set; }
public int Weight { get; set; }
public Animal(Cat data){Init(data);}
public Animal(Dog data){Init(data);}
private void Init(dynamic data)
{
this.Colour = data.Colour;
this.Weight = data.Weight;
}
}
Run Code Online (Sandbox Code Playgroud)
这有效,但我失去了所有类型的安全性,是否有比构造函数注入更好的解决方案?
谢谢,
乔
编辑:这是一个现实世界的例子.我有一个第三方库,它返回3个对象:
(这些都是来自服务引用的自动生成的类,并且属性非常相似)
我不想处理这三个对象,而是处理单个PageData对象或它们的集合.
您可以将逻辑放在所有其他构造函数调用的一个公共构造函数中:
public class Animal
{
public string Colour { get; set; }
public int Weight { get; set; }
public Animal(Dog data) : this (data.Colour, data.Weight)
{
}
public Animal(Cat data) : this (data.Colour, data.Weight)
{
}
private Animal(string colour, int weight)
{
this.Colour = colour;
this.Weight = weight;
}
}
Run Code Online (Sandbox Code Playgroud)
这与您的第二个解决方案非常相似,但它不会失去类型安全性。
| 归档时间: |
|
| 查看次数: |
281 次 |
| 最近记录: |