这是不好的做法吗?泛型接口的重载方法并返回不同的类型
本文关键字:方法 重载 泛型接口 类型 返回 | 更新日期: 2023-09-27 17:55:46
作为这个问题的后续:
重载方法时返回不同类型的做法是不好的吗?
正在考虑我正在使用的一个非常简单的映射器界面:
public interface IMap<T,U>
{
U MapFrom(T obj);
T MapFrom(U obj);
}
这也许是上述问题讨论的一个更有针对性的例子。实现此接口的实例只是在类型之间映射。
我可以这样做:
public interface IMap<T,U>
{
U MapRight(T obj);
T MapLeft(U obj);
}
但这似乎很愚蠢,因为从概念上讲,to和from的概念并不真正适用于我的通用映射器。这只是一张双向地图。因此,为了补充链接的问题:
这是通用地图的不良做法吗?
我应该如何命名方法以避免返回不同的类型,而不会影响接口的"泛型"?
编辑:另外,作为对答案的回应,这是针对映射器的(并不是说它真的很相关)。我只是没有在界面中包含映射方法。
EDIT2:我想如果我有一个单向映射器(或适配器),那么同样的问题也会适用,然后我为两个方向实现了两次......相同的方法名称,不同的返回类型。
这很难,因为你没有办法限制T和你不是同一个类型,所以你总是冒着让它们相同的风险。 我想说你需要找到两个你可以接受的名字,比如:
- 地图优先
- 地图第二
或:
- 地图
- 反向映射
或:
- 向前
- 反向
首先,你不是在映射,而是在转换。 这是有区别的。 映射是字典的作用。 转换是当您输入一种类型并取出另一种类型时发生的情况。
我会像这样创建界面:
interface IConvertible<TSource, TResult>
{
TResult Convert(TSource source);
}
您想要双向转换吗? 伟大。 同时实现 IConvertible 和 IConvertible。 想要将其封装到单个接口中吗? 太好了,创建ITwoWayConvertible并实现两者。