2013-08-19 2 views
4

두 개의 일반 매개 변수가있는 클래스가 있습니다. 두 번째 일반 매개 변수를 첫 번째 일반 매개 변수와 다른 형식으로 제한하려고합니다. 컴파일 타임에 그러한 제한을 만드는 방법이 있습니까? 런타임에 유형을 확인하는 것은별로 유용하지 않습니다.일반 매개 변수 : 다른 유형 보장

public class Test<A, B> 
    where B : not_typeof(A) 
{ 
    // ... 
} 
+0

실제로 약간 다른 시나리오이지만 궁극적으로는 @Sam이 –

+0

에 연결되는 것과 같은 대답입니다. 다른 제약 조건이 있습니까? 왜냐하면'A : IUtensil','B : IVehicle','Test 사용자가 있다면 왜 신경 쓰나요? 작동 할 것입니다 ... 좀 더 자세히 설명해 주시겠습니까? – Kobi

+0

그런 제약 조건을 쓸 수는 없지만 다른 제약 조건을 둘 수 있습니다. 예를 들어'A'가 클래스'Animal'과'B' 클래스에서 파생되어야하는 경우 '자전거'클래스에서 파생되어야하며,이 두 클래스 중 어느 것도 다른 클래스에서 파생되지 않으면 '코비 (Kobi)'에서와 같이 'A'와 'B'가 같은 유형이 될 수 없다는 것을 알게됩니다. 비슷하게 하나가'struct' 제약 조건 (null 값을 가질 수없는 값 타입)을 가지고 있고 다른 하나는'class' 제약 조건 (참조 타입)을 가지고있는 경우입니다. –

답변

4

유일한 방법은 런타임입니다.

나는 대답에 게시 된 answer의 답을 수정했습니다.

+0

그게 내가 현재하고있는 해결책이다. 작동하지만 오류가 실행 시간에만 표시되기 때문에 불쾌합니다. 나는 컴파일 타임에 일하는 해결책을 찾고 있었다. 그러나 (현재) 컴파일 타임에 이러한 제한을 만들 수있는 방법이 없기 때문에 귀하의 게시물을 답변으로 표시하겠습니다. – Shinja