0

作为这个问题的后续:
重载方法时返回不同类型是一种不好的做法吗?

我正在考虑我正在使用的一个非常简单的映射器界面:

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

但这似乎很愚蠢,因为从概念上讲,tofrom的概念并不真正适用于我的通用映射器。这只是一个双向映射。所以,为了补充链接的问题:
这个通用地图是不好的做法吗?

我应该如何命名方法以避免返回不同的类型而不影响接口的“通用性”?

编辑:另外,作为对答案的回应,这针对映射器的(并不是真的相关)。我只是没有在界面中包含映射方法。

EDIT2:我想如果我有一个单向映射器(或适配器),我想同样的问题会适用,然后我为两个方向实现了两次......相同的方法名称,不同的返回类型。

4

2 回答 2

1

这很困难,因为您无法将 T 和 U 限制为不同类型,因此您总是冒着让它们相同的风险。我想说你只需要找到两个你可以忍受的名字,比如:

  • 地图优先
  • 地图秒

或者:

  • 地图
  • 反向映射

或者:

  • 向前
  • 逆转
于 2011-05-10T17:59:57.793 回答
0

首先,您不是在映射,而是在转换。有区别。映射是字典的作用。转换是当您输入一种类型并取出另一种类型时发生的事情。

我会创建这样的界面:

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

你想要双向转换?伟大的。实现 IConvertible 和 IConvertible。想要将其封装到单个接口中?太好了,创建 ITwoWayConvertible 并实现两者。

于 2011-05-10T18:53:00.670 回答