2012-10-16 112 views
2

我試圖做一個泛型類。有沒有辦法制定一個約束,以便只有實現了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約束只適用於類,如果我沒有弄錯的話。這是可能的還是可以有人提供解決方法?

回答

4

Generic constraint的有太多的接口工作。從文檔

其中T:類類型參數必須是引用類型,包括任何 類,接口,委託或陣列型。

所以,你可以使用關鍵字whereIComparable

public class MyClass<T> where T : IComparable 
{ 

} 
3

一般不與接口也工作:

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