3

我想创建一个适用于所有 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)

4

1 回答 1

11

所有派生的泛型类也必须实现泛型约束。

因此,您应该将类​​声明为:

public class InsertionSort<T> : SortAlgorithm<T> where T : System.IComparable<T>

错误基本上说的是泛型参数T(此时可以是任何类或结构)不能保证实现IComparable<T>,因为受基类(SortAlgorithm接口)的约束。

您也可以通过在类上指定约束来提供此保证InsertionSort,如上所示。

于 2012-11-04T15:15:33.890 回答