2010-03-22 1 views

답변

16

MethodBase는 속성을 갖는다 ReturnTypeMethodInfo의 기본 클래스로 사용된다.

MethodInfo의 인스턴스로 캐스팅하고 해당 속성을 확인할 수 있습니다.

+0

우리가 MemberInfo에서 상을 찾으려는 경우. 이 시나리오에서 우리는 모든 멤버 (예 : 문자열 유형을 반환하는 메소드 및 필드)를 필터링하려고한다고 가정합니다. MemberInfo에는이를 나타낼 수있는 속성이 있습니까? –

21

MethodBase 자체는 반환 형식이 없으므로 일반적인 형식 외에도 반환 형식이없는 생성자와 같은 메서드를 나타내는 데에도 사용됩니다. 대신 인스턴스가 MethodInfo인지 확인하고 ReturnType 속성을 확인해야합니다.

CompileTimeValidate(MethodBase method) { 
    var normalMethod = method as MethodInfo; 
    if(normalMethod != null) { 
    ValidateReturnType(normalMethod.ReturnType); 
    } 
} 
1

다음과 같이 시도해보십시오. MethodInfo에는 속성이 있지만 MethodBase도 생성자에 사용되며 반환 형식이 없습니다.

MethodBase b = this.GetType().GetMethods().First(); 
if(b is MethodInfo) 
    MessageBox.Show((b as MethodInfo).ReturnType.Name); 
+2

사소한 점 ... 'b is MethodInfo'를 이미 체크했다면, 직접 형 ('MethodInfo) b'가'b as MethodInfo'보다 약간 바람직합니다. –

+0

어째서? :) ... –

+2

따라야 할 지침 : 호환되지 않는 유형의 경우 null을받을 때 'as'를 사용하면 코드에서 허용됩니다. 이 경우, null은 if 내부에서 허용되지 않기 때문에'(MethodInfo) b'를 대신 사용하십시오. 더 나은 점은'is '대신'as'를 사용하고 null을 테스트하여 캐스트를 두 번 수행하는 비용을 피하십시오. – Bevan