.Net не может получить приватный метод по рефлексии - PullRequest
0 голосов
/ 17 марта 2012

У меня проблема с получением закрытого метода с использованием отражения.Даже с 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 возвращает ноль.В чем может быть проблема?

[отредактированный код]

Ответы [ 2 ]

3 голосов
/ 17 марта 2012

Проблема точно такая, как я предложил в моем комментарии - вы пытаетесь найти метод, основанный на типе времени выполнения объекта, который равен RadioPropertiesState ... но он не объявлен в этом типе или видимым для него.

Измените GetMethod вызов на:

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

и работает нормально.

0 голосов
/ 17 марта 2012

Чтобы получить приватные члены, вам нужно позвонить GetMethod точно по типу, где он был объявлен, а не по производному типу.

BindingFlags.FlattenHierarchy здесь не работает, так как метод является приватным.

...