gpt4 book ai didi

c# - 在界面中使用泛型

转载 作者:太空狗 更新时间:2023-10-29 23:06:32 24 4
gpt4 key购买 nike

更新:

海因齐是对的。 AutoCAD 多段线是引用类型而不是结构。好点子。但我已经简化了场景,因为我在实际应用程序中处理的是一个结构化的 AutoCAD 对象。所以请将两者都视为结构而不是引用类型。


我正在寻找应对这种情况的正确方法,如果有人能阐明或帮助我更好地理解,我将不胜感激。

数据访问层中有一个接口(interface),有两个实现来处理两个不同的提供程序:AutoCad 和 Sketchup API。

interface IEntity
{
void object GetPoly();
void void InsertPoly(object poly);
}

class AutocadEntity
{
void object GetPoly()
{
//calling Autocad APIs
return Autocad Polyline object
}
void InsertPoly(object poly){...}
}

GetPoly 的 Autocad 实现将返回 Polyline 对象,因为这是在 Autocad API 中定义为多段线的对象,而 Sketchup 将返回 Face 对象。

我已经将返回类型(和参数)定义为对象来处理这些不同的类型。成本是装箱/拆箱发生的性能问题。在返回/参数是 object[] 的地方,它更大胆地展示了自己。

我首先想知道使方法返回/参数类型通用是解决方案,但后来我认为这不会,因为实现是特定于类型的。

最佳答案

The cost is performance issue where boxing/unboxing happens.

我不这么认为。 Polyline是一个类,而不是一个结构。因此,不涉及拳击。

如果这实际上是您应用程序的性能瓶颈,那么您的性能就会在其他地方丢失。一如既往:在优化之前进行测量,否则您最终可能会优化错误的东西。

我认为您的解决方案非常好。您可以使用泛型并派生 AutocadEntity来自 IEntity<Polyline> ,但这有什么意义呢?由于 Polyline/Face 在您的界面中同时用作输入和输出参数,您可以制作 IEntity既不协变也不逆变。因此,最常见的基本类型 IEntity<Polyline>IEntity<Face>将是 object ,这意味着您不能再只传递一般的 IEntity如果您不知 Prop 体类型。

关于c# - 在界面中使用泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32011316/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com