2 つの汎用インターフェイスを実装しようとしています。と の両方をITwoWayMapper<T,U>
実装することは理にかなっています。だから私がそれをやろうとすると:IOneWayMapper<T,U>
IOneWayMapper<U,T>
public interface IOneWayMapper<T, U>
{
U Map(T source);
}
public interface ITwoWayMapper<T, U> :
IOneWayMapper<T, U>,
IOneWayMapper<U, T>
{
TTwo Map(TOne source);
TOne Map(TTwo source);
}
エラーが発生しますInterface ITwoWayMapper<T,U> cannot implement both IOneWayMapper<T,U> and IOneWayMapper<U,T> because they may unify for some type parameter substitutions
。ですから、どのインターフェイスが満たされているかを判断できなかったため、これがあいまいであることは理にかなっていると思います。
したがって、これは私の質問につながります:型制約を使用してこのようなことを言うことは可能ですか?:
public interface ITwoWayMapper<T, U> :
IOneWayMapper<T, U>,
IOneWayMapper<U, T>
where T: !U
{
TTwo Map(TOne source);
TOne Map(TTwo source);
}