2012-03-31 10 views
4

"and"대신 "or"형식 제약 조건을 사용할 수 있습니까? "and"는 두 유형 사이에 쉼표를 붙임으로써 완성됩니다. 그러나 "또는"은 어떨까요?조건부 제약 조건 또는 형식 제약 조건

class Type1<T, U> 
{ 
    public static Type1<T, U> New<V>(V v) 
     where V : T, U 
    { 
     return new Type1<T, U>(); 
    } 
} 

따라서 위의 예에서 새 (에 전달 된 인수)는 T와 U. 모두해야하지만 거기있는 U.

답변

4

은 T 또는 중 하나가되고 싶어요 당신이 묘사 한 방식으로 "또는"제약을 표현할 방법이 없습니다. 그러나 U을 허용하는 두 개의 오버로드와 다른 T을 허용하여이를 에뮬레이트 할 수 있습니다. 이 두 당신이 비록 T 또는 U 매개 변수와 함께 할 싶어 무엇을 아주 확실하지 T 또는 U

class Type1<T, U> { 
    public static Type1<T, U> New(U p) { 
    return NewCore(p); 
    } 

    public static Type1<T, U> New(T p) { 
    return NewCore(p); 
    } 

    private static Type1<T, U> New(object o) { 
    ... 
    } 
} 

를 처리하는 공통 기능에 공급할 수 있습니다. 아마도 당신은 조금 정교 할 수 있습니다.

+0

+1 이미 두 가지 공개 오버로드가 있습니다. 그래서이 방법을 사용하면 4 개의 공용 과부하와 개인용 과부하가 생깁니다. 과부하가 많이 발생하지만 어쨌든 작동합니다. – HappyNomad

1

빈 마커 인터페이스를 생성하고 T와 U 모두를 "구현"할 수 있습니다. 그런 다음 해당 인터페이스를 구현하는 모든 유형으로 제한합니다.

public interface ITOrU { /*empty interface*/ } 

public interface IT : ITOrU 
{ 
} 

public interface IU : ITOrU 
{ 
} 

class Type1<T, U> 
    where T : IT 
    where U : IU 
{ 
    public static Type1<T, U> New(ITOrU v) 
    { 
     return new Type1<T, U>(); 
    } 
} 
+0

이것은 유용한 답변입니다. 감사합니다! 그러나 코드 샘플을 추가하면 더 좋을 것입니다. – HappyNomad