Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将泛型类绑定到特定接口_C#_Generics_Interface_Icomparable - Fatal编程技术网

C# 将泛型类绑定到特定接口

C# 将泛型类绑定到特定接口,c#,generics,interface,icomparable,C#,Generics,Interface,Icomparable,我正在尝试创建一个泛型类。有没有一种方法可以创建一个约束,这样只有实现了IComparable的对象才能传递到我的泛型中。例如: public class MyClass<T> { } public class MyFooClass { } public class MyComparableFooClass : IComparable { public int Compare(MyComparableFooClass q) { return

我正在尝试创建一个泛型类。有没有一种方法可以创建一个约束,这样只有实现了
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
{
}
公共类MyFooClass
{
}
公共类MyComparableFooClass:IComparable
{
公共整数比较(MyComparableFooClass q)
{ 
返回0;
}
}
公共类MyMainClass()
{
private MyClass _myIntClass;//这没问题,因为int实现了IComparable
private MyClass\u myComparableFooClass//这应该也可以,因为int实现了IComparable
私有MyClass _myFooClass;//这应该会得到一个编译错误,因为myFooClass没有实现IComparable
}
希望我的例子是清楚的。我只想
MyClass
允许实现
IComparable
的对象。我知道,
where
约束只适用于类,如果我没有弄错的话。这是可能的还是有人可以提供解决方案?

通用也可以使用界面:

公共类MyClass,其中T:IComparable
{
}
的界面工作也是如此。从文件中

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

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

public class MyClass<T> where T : IComparable
{

}
公共类MyClass,其中T:IComparable
{
}
public class MyClass<T> where T : IComparable
{

}