作为这个问题的后续行动:
Is a bad practice to Return different types when overloading a method?
我在想一个我正在使用的非常简单的mapper接口:
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);
}
但这看起来很愚蠢,因为从概念上讲,到和来自的概念并不真正适用于我的通用映射器。这只是一张双向地图。
所以,赞美相关的问题:
这种通用地图是不好的做法?
如何命名方法以避免在不损害界面“通用性”的情况下返回不同类型?
编辑:此外,作为对答案的回答,此 用于映射器(并非它真正相关)。我只是不在界面中包含映射方法。
EDIT2:我想如果我有一个单向映射器(或适配器)然后我为两个方向实现了两次...同样的方法名称,不同的返回类型
答案 0 :(得分:1)
这很难,因为你没有办法限制T和U不是同一类型,所以你总是冒着让它们变得相同的风险。我要说你需要找到两个你可以接受的名字,比如:
或者:
或者:
答案 1 :(得分:0)
首先,你没有映射,你正在转换。有区别。映射就是字典的作用。转换就是当你输入一种类型并获得另一种类型时会发生的事情。
我会创建这样的界面:
interface IConvertible<TSource, TResult>
{
TResult Convert(TSource source);
}
您想要双向转换吗?大。实现IConvertible和IConvertible。想将其封装到单个界面中吗?太棒了,创建ITwoWayConvertible并实现它们。