Это плохая практика? Перегрузка методов для универсального интерфейса и возвращение разных типов - PullRequest
0 голосов
/ 10 мая 2011

В продолжение этого вопроса:
Плохо ли возвращать разные типы при перегрузке метода?

Я думаю об очень простом интерфейсе картографа, который я использую:

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 ]

1 голос
/ 10 мая 2011

Это сложно, потому что у вас нет способа ограничить T и U, чтобы они не были одного и того же типа, поэтому вы всегда рискуете, чтобы они были одинаковыми.Я бы сказал, что вам нужно просто найти два имени, с которыми вы можете жить, например:

  • MapFirst
  • MapSecond

Или:

  • Карта
  • ReverseMap

Или:

  • Вперед
  • Обратный
0 голосов
/ 10 мая 2011

Во-первых, вы не отображаете, вы конвертируете.Есть разницаКартография - это то, что делает словарь.Конвертация - это то, что происходит, когда вы вводите один тип и получаете другой.

Я бы создал интерфейс следующим образом:

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

Вы хотите двустороннее преобразование?Отлично.Реализуйте как IConvertible, так и IConvertible.Хотите заключить это в единый интерфейс?Отлично, создайте ITwoWayConvertible и реализуйте оба.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...