2010-08-15 8 views
4

일부 제네릭에 어려움을 겪고 있습니다. 다음은 내 설정이다 :유형 제한 일반 사항

interface I<T> { } 

[...] 
void Add<T>(T obj) where T : I<??> { } 

가 어떻게이 Add 방법 TI를 구현하도록 할 수 있습니다?

+0

죄송합니다 -'Add' 인터페이스의 일부가 아닌'I'하지만 다른 클래스 –

답변

8

다음 서명은 Add 어떤 형태 파라미터를 가지는 I<>을 구현하는 T 걸릴 수 있습니다.

void Add<T,S>(T obj) where T : I<S> { 
} 

이 방법 서명을 사용하는 단점은 그 형식 유추가 걷어차하지 않습니다 그리고 당신은 명백히 바보 보이는 모든 유형의 매개 변수를 지정해야합니다 :

blah.Add<I<int>, int>(iInstance); 

훨씬 간단을 접근 방식은 서명 아래 사용하는 것입니다

void Add<T>(I<T> obj) { 
} 
+0

'void 추가 (I obj)'그랬습니다. 감사! –

1

추가하려면 T 매개 변수를 전달해야합니다.

void Add<TI, TAny>(TI obj) where TI : I<TAny> 
+0

의 방법은'TI'입니다 제네릭 자체가 아닌 일반 매개 변수이므로 'TI '을 사용할 수 없습니다. 매개 변수가 'TI'일까요? 그리고 당신의 제약 조건은'어디 T : I '이어야합니다. –