这是不好的做法吗?重载通用接口的方法并返回不同的类型

时间:2011-05-10 17:44:50

标签: c# generics interface mapper

作为这个问题的后续行动:
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:我想如果我有一个单向映射器(或适配器)然后我为两个方向实现了两次...同样的方法名称,不同的返回类型

2 个答案:

答案 0 :(得分:1)

这很难,因为你没有办法限制T和U不是同一类型,所以你总是冒着让它们变得相同的风险。我要说你需要找到两个你可以接受的名字,比如:

  • MapFirst
  • MapSecond

或者:

  • 地图
  • ReverseMap

或者:

  • 转发
  • 反向

答案 1 :(得分:0)

首先,你没有映射,你正在转换。有区别。映射就是字典的作用。转换就是当你输入一种类型并获得另一种类型时会发生的事情。

我会创建这样的界面:

interface IConvertible<TSource, TResult>
{
    TResult Convert(TSource source);
}

您想要双向转换吗?大。实现IConvertible和IConvertible。想将其封装到单个界面中吗?太棒了,创建ITwoWayConvertible并实现它们。