MethodBase에서 메서드의 반환 형식을 찾으려면 어떻게해야합니까? 나는 PostSharp를 사용하고 있고 올바른 서명이있는 메소드에 속성이 적용되도록 CompileTimeValidate (MethodBase 메소드) 메소드를 재정의하려고합니다.C#에서 System.Reflection.MethodBase를 사용하여 메서드의 반환 형식을 찾으려면 어떻게해야합니까?
감사
MethodBase에서 메서드의 반환 형식을 찾으려면 어떻게해야합니까? 나는 PostSharp를 사용하고 있고 올바른 서명이있는 메소드에 속성이 적용되도록 CompileTimeValidate (MethodBase 메소드) 메소드를 재정의하려고합니다.C#에서 System.Reflection.MethodBase를 사용하여 메서드의 반환 형식을 찾으려면 어떻게해야합니까?
감사
MethodBase는 속성을 갖는다 ReturnTypeMethodInfo의 기본 클래스로 사용된다.
MethodInfo의 인스턴스로 캐스팅하고 해당 속성을 확인할 수 있습니다.
MethodBase
자체는 반환 형식이 없으므로 일반적인 형식 외에도 반환 형식이없는 생성자와 같은 메서드를 나타내는 데에도 사용됩니다. 대신 인스턴스가 MethodInfo
인지 확인하고 ReturnType
속성을 확인해야합니다.
CompileTimeValidate(MethodBase method) {
var normalMethod = method as MethodInfo;
if(normalMethod != null) {
ValidateReturnType(normalMethod.ReturnType);
}
}
다음과 같이 시도해보십시오. MethodInfo
에는 속성이 있지만 MethodBase
도 생성자에 사용되며 반환 형식이 없습니다.
MethodBase b = this.GetType().GetMethods().First();
if(b is MethodInfo)
MessageBox.Show((b as MethodInfo).ReturnType.Name);
사소한 점 ... 'b is MethodInfo'를 이미 체크했다면, 직접 형 ('MethodInfo) b'가'b as MethodInfo'보다 약간 바람직합니다. –
어째서? :) ... –
따라야 할 지침 : 호환되지 않는 유형의 경우 null을받을 때 'as'를 사용하면 코드에서 허용됩니다. 이 경우, null은 if 내부에서 허용되지 않기 때문에'(MethodInfo) b'를 대신 사용하십시오. 더 나은 점은'is '대신'as'를 사용하고 null을 테스트하여 캐스트를 두 번 수행하는 비용을 피하십시오. – Bevan
MethodInfo.ReturnType
속성을 사용해보십시오.
반환 유형 속성을 얻으려면 먼저 Type
을 가져옵니다. Type
에서 MethodInfo
을 얻으세요. MethodInfo
에서 ReturnType
을 얻습니다. 당신이 MethodBase 함께 할 수없는 것 같다
...
http://msdn.microsoft.com/en-us/library/system.reflection.methodinfo.returntype.aspx
우리가 MemberInfo에서 상을 찾으려는 경우. 이 시나리오에서 우리는 모든 멤버 (예 : 문자열 유형을 반환하는 메소드 및 필드)를 필터링하려고한다고 가정합니다. MemberInfo에는이를 나타낼 수있는 속성이 있습니까? –