2012-07-18 2 views
3

리플렉션을 통해 호출 할 가장 적절한 메서드를 찾으려고합니다. 그 메서드에 전달할 형식이있을 때입니다.C# 리플렉션 과부하 메서드 wr을 상속

나를 이렇게 같은 매개 변수의 동일한 수와 과부하되어 걱정되는 에지의 경우 : 내가 손에 가지고있는 유형 UserClassB 동안 런타임에서

class UserClass {} 
class UserClassB : UserClass {} 

class SomeClass { 
    void method(object x); 
    void method(UserClass x); 
} 

내가, method를 호출에 관심이 있어요.

method(UserClass)이 가장 적절합니다.

typeof(SomeClass).GetMethod("method", new Type[] { typeof(UserClass2) }));을 사용하면 null이 반환되므로 전달 된 유형과 정확히 일치하는 항목을 기반으로 검색 한 것 같습니다.

아이디어가 있으십니까? 감사.

답변

2

바인딩 플래그가 누락되었습니다. 오버로드를 사용하면 다음 플래그를 전달할 수 있습니다.
BindingFlags.Instance | BindingFlags.NonPublic

GetMethod는 공용 메서드가 필요하므로 지정하지 않으면 null이됩니다.

var method = typeof(SomeClass).GetMethod("method", BindingFlags.Instance | BindingFlags.NonPublic, null, new[] { typeof(UserClass) },null); 
+0

사실 당신은 맞습니다. 사실, 나는 그것을 대중에게만 필요로합니다 ...하지만 나는 그것을 잘못 테스트했습니다. 감사! – ravyoli