Я столкнулся с ошибкой компилятора при попытке реализовать интерфейс дважды для одного и того же класса:
public class Mapper<T1, T2> : IMapper<T1, T2>, IMapper<T2, T1>
{
/* implementation for IMapper<T1, T2> here. */
/* implementation for IMapper<T2, T1> here. */
}
Ошибка:
"Mapper" не может реализовать как "IMapper", так и "IMapper", поскольку они могут объединяться для некоторых подстановок параметров типа.
Почему это обходное решение работает? Мне интересно, разрешил ли я проблему или просто обманул компилятор.
public class Mapper<T1, T2> : MapperBase<T1, T2>, IMapper<T1, T2>
{
/* implementation for IMapper<T1, T2> here. */
}
public class MapperBase<T1, T2> : IMapper<T2, T1>
{
/* implementation for IMapper<T2, T1> here. */
}
EDIT. Я обновил MyClass
, MyClassBase
и IMyInterface
до Mapper
, MapperBase
и IMapper
, чтобы представить более реальный сценарий, где этот вопрос может присутствовать.