我正在尝试:
Type ThreadContextType = typeof(Application).GetNestedType("ThreadContext", System.Reflection.BindingFlags.NonPublic);
MethodInfo FDoIdleMi = ThreadContextType.GetMethod("FDoIdle", BindingFlags.NonPublic |
BindingFlags.Instance, null, new Type[] { typeof(Int32) }, null);
ThreadContextType可以,但是FDoIdleMi为null。我知道GetMethod调用中有问题,因为FDoIdle来自UnsafeNativeMethods.IMsoComponent接口。
怎么做?谢谢。
最佳答案
您需要完全限定方法名称,因为它们正在使用显式接口实现:
Type type = typeof( Application ).GetNestedType( "ThreadContext",
BindingFlags.NonPublic );
MethodInfo doIdle = type.GetMethod(
"System.Windows.Forms.UnsafeNativeMethods.IMsoComponent.FDoIdle",
BindingFlags.NonPublic | BindingFlags.Instance );
根据记录,对非公共成员进行反思通常是不明智的做法,但您可能已经知道这一点。
编辑本着教一个人钓鱼的精神,我通过在类型对象上调用
GetMethods(...)
并检查返回的数组以了解方法的命名方式来解决这个问题。当然,这些名称包括完整的名称空间规范。关于c# - 如何在ThreadContext类中获取MethodInfo?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/215213/