Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 组合/转换来自2个不同API的2个类似对象类型_C#_Oop_Design Patterns - Fatal编程技术网

C# 组合/转换来自2个不同API的2个类似对象类型

C# 组合/转换来自2个不同API的2个类似对象类型,c#,oop,design-patterns,C#,Oop,Design Patterns,我是C#and OOP的初学者。我使用的两个第三方API包含相似的对象类型,它们的属性包含相同的值,但这两个API都有我需要使用的唯一(且相同)函数。例如: API1-积分类 公共财产 X:双人 Y:双份 公共方法 距离() ToArray() API2-积分类 公共财产 X:双人 Y:双份 公共方法 项目() ToArray() 目前,我已经创建了帮助器方法来从API1点类转换为API2点类,反之亦然,但必须有更好的解决方案。在这种情况下,编程专家会怎么做?谢谢 您可以使用。它使您能够定义映射

我是C#and OOP的初学者。我使用的两个第三方API包含相似的对象类型,它们的属性包含相同的值,但这两个API都有我需要使用的唯一(且相同)函数。例如:

API1-积分类

公共财产

X:双人

Y:双份

公共方法

距离()

ToArray()

API2-积分类

公共财产

X:双人

Y:双份

公共方法

项目()

ToArray()

目前,我已经创建了帮助器方法来从API1点类转换为API2点类,反之亦然,但必须有更好的解决方案。在这种情况下,编程专家会怎么做?谢谢

您可以使用。它使您能够定义映射

Mapper.CreateMap<Order, OrderDto>();
Mapper.CreateMap();
然后在任何地方都使用它

OrderDto dto = Mapper.Map<OrderDto>(order);
OrderDto-dto=Mapper.Map(order);

包装类和显式转换操作可以帮助解决您的问题

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
    }    
}

最后,我向API1 Point类添加了各种扩展方法。使用类型转换帮助器方法,我可以让API1点类使用API2点类方法。这样,我在代码中只使用API1点对象。

您如何处理API1和API2中的点类?是否将点对象从一个API处理为另一个API的输入?根据用户的操作,我可能需要使用其中一个唯一的函数。例如,API1处理可视化和UI,但有一些独特的函数(将样条线转换为点),然后我使用API2,这是纯数学函数,为其提供点。因此,我需要将API1点实体转换为API2点实体,以使函数正常工作。完成后,API2返回一组API2点,我需要将其转换回API1点,以显示在屏幕上。我没有看到这有助于OP的实际证据。Fendy,我喜欢这种方法。以确保我完全理解。我创建了自己的point类,其中包含每个API的一个点、显式运算符和两个API中需要的方法。然后我可以通过将任意一个API点转换为我自己的集成点来使用我的类?正确。这样,您可以同时使用这两个类,同时仍然可以控制自己的流。铸造可以由建造师注入代替,但这取决于你的口味。