.Net无法通过反射获取私有方法
我在使用反射获取私有方法时遇到问题。 即使使用BindingFlags.NonPublic和BindingFlags.Instance,它也不起作用。 HandleClientDrivenStatePropertyChanged与CreateRadioPropertyInstances方法在同一个类上定义.Net无法通过反射获取私有方法,.net,reflection,private-methods,.net,Reflection,Private Methods,我在使用反射获取私有方法时遇到问题。 即使使用BindingFlags.NonPublic和BindingFlags.Instance,它也不起作用。 HandleClientDrivenStatePropertyChanged与CreateRadioPropertyInstances方法在同一个类上定义 class Program { static void Main(string[] args) { RadioPropertiesState st
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。
有什么问题吗
[编辑的代码]要获取私有成员,您需要对声明它的确切类型而不是派生类型调用
GetMethod
BindingFlags.FlattHierarchy
在这里不起作用,因为该方法是私有的。要获取私有成员,需要对声明它的确切类型而不是派生类型调用GetMethod
BindingFlags.FlattHierarchy
在这里不起作用,因为该方法是私有的。问题正是我在评论中建议的-您试图根据对象的执行时间类型找到该方法,即RadioPropertiesState
。。。但它不是在那个类型中声明的,也不是对它可见的
将您的GetMethod
调用更改为:
MethodInfo changedEventHandlerInfo = typeof(BaseRadioPropertiesState)
.GetMethod(...)
它工作得很好。问题正是我在评论中提出的-您试图根据对象的执行时间类型找到方法,即
RadioPropertiesState
。。。但它不是在那个类型中声明的,也不是对它可见的
将您的GetMethod
调用更改为:
MethodInfo changedEventHandlerInfo = typeof(BaseRadioPropertiesState)
.GetMethod(...)
而且它工作得很好。奇怪,在.NET 4上工作得很好。尝试使用BindingFlagsAn。另一种猜测是,这可能是由于缺少某些权限造成的。如何调用use
类X
?它是加载到不同的域还是从smt的远程源加载的?请展示一个简短但完整的程序来演示这个问题。这应该没问题——当然,如果这个方法最终在派生类上被调用,它将找不到它…@jonskeet:我发布了更多的代码it@leozilla当前位置在我看来,这不是一个完整的程序。主要的方法在哪里?奇怪,在.NET4上很好用。尝试使用BindingFlagsAn。另一种猜测是,这可能是由于缺少某些权限造成的。如何调用use类X
?它是加载到不同的域还是从smt的远程源加载的?请展示一个简短但完整的程序来演示这个问题。这应该没问题——当然,如果这个方法最终在派生类上被调用,它将找不到它…@jonskeet:我发布了更多的代码it@leozilla当前位置在我看来,这不是一个完整的程序。主要的方法在哪里?