2010-05-20 6 views
4

제네릭 형식 매개 변수와 반환 형식의 차이를 감지하기 위해 인터페이스에 반영 할 수있는 방법이 있습니까? 즉, 나는 두 인터페이스를 구별하기 위해 반사를 사용할 수 있습니다 모두인터페이스의 제네릭 형식 매개 변수에 대한 차이 검색

interface IVariant<out R, in A> 
{ 
    R DoSomething(A arg); 
} 


interface IInvariant<R, A> 
{ 
    R DoSomething(A arg); 
} 

일리노이이 같은 보인다.

답변

6

제네릭 형식의 분산 플래그를 확인하는 데 사용할 수있는 GenericParameterAttributes Enumeration이 있습니다.

제네릭 형식을 사용하려면 typeof을 사용하고 형식 매개 변수는 생략하십시오.

GenericParameterAttributes gpa = typeParams[0].GenericParameterAttributes; 
GenericParameterAttributes variance = gpa & GenericParameterAttributes.VarianceMask; 

string varianceState; 
// Select the variance flags. 
if (variance == GenericParameterAttributes.None) 
{ 
    varianceState= "No variance flag;"; 
} 
else 
{ 
    if ((variance & GenericParameterAttributes.Covariant) != 0) 
    { 
     varianceState= "Covariant;"; 
    } 
    else 
    { 
     varianceState= "Contravariant;"; 
    } 
} 
:

Type theType = typeof(Test<,>); 
Type[] typeParams = theType.GetGenericArguments(); 

그런 다음 유형 매개 변수 플래그를 검사 할 수 있습니다 : (링크에서 코드) 매개 변수의 수를 표시하기 위해 쉼표에 남겨주세요