すべてのIComparableタイプで機能するインターフェイスを作成したいと思います。例えば
public interface SortAlgorithm<T> where T : System.IComparable<T>
{
List<T> Sort(List<T> input);
}
そして、その実装者も、インターフェースで提供するのと同じ仕様で汎用的にする必要があります。以下の例のように
public class InsertionSort<T> : SortAlgorithm<T>
これを行う私の目的は次のとおりです。すべての並べ替えアルゴリズムを、IComparableインターフェイスを実装するすべてのタイプで機能させたいです。そして、Tがインターフェイスで一度IComparableのサブクラスであるという仕様を提供したいと思います。しかし、これを行うと、次のエラーが発生します。
エラー1タイプ'T'は、ジェネリック型またはメソッド'Algorithms.SortingAlgorithm.SortAlgorithm'のタイプパラメーター'T'として使用できません。'T'から'System.IComparable'へのボクシング変換またはタイプパラメータ変換はありません。
その理由がわかりませんでした。ジェネリックインターフェイスを実装し、その実装クラスをジェネリックにすることもできますが、インターフェイスで仕様を指定する場合は同じことはできません(T:System.IComparable)