以下のジェネリック型に制約を付けたいのですが、意図したとおりにできるかどうかはわかりません。
public interface IMyClass<in TA, in TB>
{
bool MyMethod<TX, TY>(TX argumentX, TY argumentY);
}
public class MyClass<TA, TB> : IMyClass<TA, TB>
{
public bool MyMethod<TX, TY>(TX argumentX, IEnumerable<TY> argumentsY)
{
// DO STUFF
}
}
型 TX と TY は TA と TB を表すことを意図していますが、交換可能である必要があります (これが、コードを複製せずにメソッドで TA と TB を使用できなかった理由です)。これは、制約が機能するために必要な方法です。
- TX は、TA または TB と同じタイプでなければなりません。
- TY は、TA または TB と同じ型でなければなりません。
- TX が TA と同じ型の場合、TY は TB (および vv) と同じ型でなければなりません。
一般的な制約を使用して設計時にこれを強制する方法はありますか、または実行時に失敗するように例外を使用して実装する必要がありますか?