我经常写出来像这样的类:减少构造锅炉板代码
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;
}
}
当你有很多的性质和类型,那么你迅速用大量的样板代码结束。理想情况下,我会创建一个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;
}
}
这工作,但我失去了所有类型的安全,难道还有比构造函数注入一个更好的解决方案?
感谢,
乔
编辑:这是一个真实的例子。我有它返回3个对象第三方库调用:
- GetPageByIdResult
- GetPagesByParentIdResult
- GetPagesByDateResult
(这些都是自动生成的类从服务引用和属性是非常相同)
而不是处理这三个对象,我想处理单个PageData对象或它们的集合。
看起来像一个奇怪的类,为什么猫和狗不是从动物继承的? –
如果'Dog'和'Cat'继承自'Animal',则可以尝试:'public Animal(Anima data)' –
复制基础/父对象上的构造函数绝对不应该满足派生类型的所有情况。另外,如果'Cat'和'Dog'继承自'Animal',那么你可以用一个具有'Animal'参数的构造函数完美地完成。 – haim770