1

我在使用反射获取私有方法时遇到问题。即使使用 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 返回空值。可能是什么问题?

[编辑代码]

4

2 回答 2

4

问题与我在评论中所建议的完全一样 - 您正在尝试根据对象的执行时间类型查找方法,即RadioPropertiesState...但它没有以该类型声明或对其可见。

GetMethod将您的呼叫更改为:

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

它工作正常。

于 2012-03-17T11:58:04.137 回答
0

要获取私有成员,您需要调用GetMethod声明它的确切类型,而不是派生类型。

BindingFlags.FlattenHierarchy在这里不起作用,因为该方法是私有的。

于 2012-03-17T11:57:43.600 回答