나는 각 항목 사이의 동등한 검사를 수행하는 메소드에서 전달하고자하는 Equals 메소드가있는 콜렉션 클래스를 가지고있다.C# generic 제약 조건에서 '수퍼 유형'관계를 지정할 수 있습니까?
public delegate bool EqualityComparer<T>(T x, T y);
public class Collection<T>
{
//...
public bool Equals<U>(Collection<T> other, EqualityComparer<U> eq) where T : U
{
// code using eq delegate to test equality between
// members of this and other collection
}
}
불행하게도, 컴파일러 ('Collection.Equals()' 'T를 형식 매개 변수를 정의하지 않습니다이 이상 borks : 또한, 나는 대리자 형식은 T 자체뿐만 아니라 T의 슈퍼 클래스에서 작동하도록 허용 할 '). 이러한 유형의 제약/연산을 지정하는 방법이 있습니까?
가능할 수 있습니까? 추측에 의해 두 선언이 전체 프로젝트에 퍼지거나 심지어 지정되지 않을 수도 있기 때문에 어렵지 않을 것입니다. – Dykam
예, 완벽합니다. 유형 매개 변수가 * 하위 클래스 *가되어야한다고 지정할 수 있습니다. 뭔가 다른, 그래서 왜 다른 방법 라운드? (Java는 이것을 허용합니다.'T extends Foo' 대신에'T super Foo'를 사용합니다.) –
아 - 라이더로 쓰고있는 것을 넣으려는 답을 보았습니다. – ShuggyCoUk