我试图做一个通用类。有没有一种限制的方法,以便只有实现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约束仅适用于类,如果我没有记错的话。这可能吗,或者有人可以提供解决方法?

最佳答案

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


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


因此,您可以将关键字whereIComparable结合使用:

public class MyClass<T> where T : IComparable
{

}

关于c# - 将泛型类绑定(bind)到特定接口(interface),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12907916/

10-10 21:39
查看更多