2012-03-17 1 views
0

리플렉션을 사용하여 전용 메서드를 가져 오는 데 문제가 있습니다. BindingFlags.NonPublic 및 BindingFlags.Instance를 사용하더라도 작동하지 않습니다. HandleClientDrivenStatePropertyChanged는 CreateRadioPropertyInstances 메서드와 동일한 클래스에 정의되어 있습니다.. 리플렉션으로 개인 메서드를 얻을 수 없습니다.

class Program 
{ 
     static void Main(string[] args) 
     { 
     RadioPropertiesState state = new RadioPropertiesState(); 
     } 
} 

internal class RadioPropertiesState : BaseRadioPropertiesState 
{ 
} 

internal class BaseRadioPropertiesState 
{ 
    public BaseRadioPropertiesState() 
    { 
      CreateRadioPropertyInstances(); 
    } 

    private void CreateRadioPropertyInstances() 
    { 
      // get the method that is subscribed to the changed event 
      MethodInfo changedEventHandlerInfo = GetType().GetMethod(
       "HandleClientDrivenStatePropertyChanged", 
       BindingFlags.NonPublic | BindingFlags.Instance | 
       BindingFlags.IgnoreCase); 
    } 

    private void HandleClientDrivenStatePropertyChanged 
     (object sender, EventArgs e) 
    { 
    } 
} 

GetMethod는 null을 반환합니다. 무엇이 문제 일 수 있습니까?

[편집 코드]

+1

.NET에서 잘 작동합니다. BindingFlags로 재생 해보십시오. –

+0

또 다른 추측은 일부 사용 권한이 없어서 발생할 수 있다는 것입니다. 'class X '를 어떻게 사용합니까? 다른 도메인이나 smt와 유사한 원격 소스에서로드 되었습니까? –

+2

문제를 보여주는 짧지만 완전한 * 프로그램을 보여주십시오. 그것은 괜찮을 것입니다 - 물론이 방법이 파생 된 클래스에서 호출되는 것으로 끝나면 찾지 못할 것입니다 ... –

답변

3

문제는 내 의견에 제안 정확히 - 당신은 RadioPropertiesState 인 객체의 실행 시간 타입에 따라 방법을 찾기 위해 노력하고 ...하지만 그 종류 나 볼에 선언 아니에요 그것에.

는에 GetMethod 전화를 변경

:

MethodInfo changedEventHandlerInfo = typeof(BaseRadioPropertiesState) 
             .GetMethod(...) 

하고 그것을 잘 작동합니다.

0

당신이 그것을 선언, 그리고 파생 형 된 정확한 유형에 GetMethod를 호출 할 필요가 private 멤버를 얻을 수 있습니다.

이 방법은 비공개이므로 여기에서 작동하지 않습니다.