2012-10-16 3 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 제약은 클래스에서만 작동한다는 것을 이해합니다. 이것이 가능합니까 아니면 누군가가 해결 방법을 제안 할 수 있습니까? 너무 인터페이스

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

답변

3

일반도 인터페이스으로 작업을 수행합니다. 문서

어디에서 T : 클래스 유형의 인수가 모든 클래스, 인터페이스, 대리자 또는 배열 유형을 포함한 참조 형, 해야합니다.

그래서 당신은 IComparable와 키워드 where를 사용할 수 있습니다

public class MyClass<T> where T : IComparable 
{ 

} 
관련 문제