将泛型类绑定到特定接口

时间:2012-10-16 05:13:29

标签: c# generics interface icomparable

我正在尝试制作一个通用类。有没有办法建立约束,以便只有实现IComparable的对象才能传递给我的泛型。例如:

public class MyClass<T>
{

}

public class MyFooClass
{
}

public class MyComparableFooClass : IComparable
{
    public int Compare(MyComparableFooClass q) 
    { 
        return 0;
    }
}

public class MyMainClass()
{
    private MyClass<int> _myIntClass; // This is okay since int implements IComparable
    private MyClass<MyComparableFooClass> _myComparableFooClass // This should be okay too since int implements IComparable
    private MyClass<MyFooClass> _myFooClass; // This should get a compile error since MyFooClass doesn't implement IComparable
}

希望我的例子很清楚。我只希望MyClass<T>允许实现IComparable的对象。我知道where约束只适用于类,如果我没有弄错的话。这是可能的,还是有人可以提供解决方案?

2 个答案:

答案 0 :(得分:4)

Generic constraint也可以使用接口。从文档

  

其中T:class类型参数必须是引用类型,包括   任何类,接口,委托或数组类型。

因此,您可以将关键字whereIComparable一起使用:

public class MyClass<T> where T : IComparable
{

}

答案 1 :(得分:3)

Generic也适用于 interface

public class MyClass<T> where T: IComparable
{
}