我是C#和OOP的初学者。我正在使用两个包含类似对象类型的第三方API,这些对象类型具有包含相同值的属性,但这两个API都具有我需要使用的唯一(和相同)功能。例如:
API1 - Point Class
公共属性
X:双重
Y:双重
公开方法
距离()
ToArray的()
API2 - Point Class
公共属性
X:双重
Y:双重
公开方法
项目()
ToArray的()
目前我已经将辅助方法从API1 Point类转换为API2 Point类,反之亦然,但必须有更好的解决方案。在这种情况下,编程专家会做什么?谢谢!
答案 0 :(得分:0)
您可以使用Automapper。它使您能够定义映射
Mapper.CreateMap<Order, OrderDto>();
然后到处使用
OrderDto dto = Mapper.Map<OrderDto>(order);
答案 1 :(得分:0)
包装器类和显式转换操作可以帮助您解决问题。
public class IntergratedPoint{
// private constructor to prevent misuse
// If want, you can do a normal constructor which create both pointApi1 and 2
private IntergratedPoint(){ }
// this can be set to reference either pointApi1 or 2
public double X{get;set;}
public double Y{get;set;}
private Api1.Point pointApi1;
private Api2.Point pointApi2;
public static explicit operator IntegratedPoint(Api1.Point pointApi1){
IntegratedPoint newPoint = new IntegratedPoint();
newPoint.pointApi1 = pointApi1;
newPoint.pointApi2 = new Api1.Point();
// set X and Y for pointApi2
}
// the explicit operator for Api2.Point
public double Distance(){
return pointApi1.Distance();
}
public double Project(){
return pointApi2.Project();
}
public double[] ToArray(){
// don't know what to do, but it you can do either pointApi1.ToArray() or so
}
}
答案 2 :(得分:0)
我最终在API1 Point类中添加了各种扩展方法。使用类型转换辅助方法,我可以让API1点类使用API2点类方法。有了这个,我只在我的代码中使用API1点对象。