Fur*_*kan 3 c# generics interface
我想创建一个适用于所有IComparable类型的接口.例如
public interface SortAlgorithm<T> where T : System.IComparable<T>
{
List<T> Sort(List<T> input);
}
Run Code Online (Sandbox Code Playgroud)
我希望它的实现者也是通用的,并且我在界面中提供了相同的规范.像下面的例子
public class InsertionSort<T> : SortAlgorithm<T>
Run Code Online (Sandbox Code Playgroud)
这是我这样做的目的.我希望我的所有排序算法都适用于实现IComparable接口的所有类型.并且希望在接口中提供T是IComparable的子类的规范.但是当我这样做时,我得到以下错误.
错误1类型'T'不能用作泛型类型或方法'Algorithms.SortingAlgorithm.SortAlgorithm'中的类型参数'T'.从'T'到'System.IComparable'没有装箱转换或类型参数转换.
我不明白这个的原因.我可以实现一个通用接口,并使其实现者类也是通用的,但是当在接口中给出规范时,我不能这样做(其中T:System.IComparable)
Cri*_*scu 11
所有派生的泛型类也必须实现泛型约束.
因此,您应该将类声明为:
public class InsertionSort<T> : SortAlgorithm<T> where T : System.IComparable<T>
Run Code Online (Sandbox Code Playgroud)
错误基本上说的是泛型参数T(此时可以是任何类或结构)不能保证实现IComparable<T>,因为基类(SortAlgorithm接口)约束.
InsertionSort如上所述,您也可以通过在类上指定约束来提供此保证.