c# - 如何获取ThreadContext类中的MethodInfo?

标签 c# reflection

我正在尝试这个:

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 接口(interface)。

如何做到这一点?谢谢。

最佳答案

您需要完全限定方法名称,因为它们使用显式接口(interface)实现:

Type type = typeof( Application ).GetNestedType( "ThreadContext",
    BindingFlags.NonPublic );
MethodInfo doIdle = type.GetMethod(
    "System.Windows.Forms.UnsafeNativeMethods.IMsoComponent.FDoIdle",
    BindingFlags.NonPublic | BindingFlags.Instance );

郑重声明,反射(reflection)非公开成员通常是不好的做法,但您可能已经知道这一点。

编辑本着授人以鱼的精神,我通过在类型对象上调用GetMethods(...)并检查返回的数组来解决这个问题查看这些方法是如何命名的。果然,这些名称包含了完整的命名空间规范。

关于c# - 如何获取ThreadContext类中的MethodInfo?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/215213/

相关文章:

java - 如何迭代一个类的方法,然后迭代返回的对象并调用另一个方法?

c# - 具有来自后台线程的回调的 WCF 服务?

c# - 使用 gps 定位系统服务依赖注入(inject)

c# - 将所有首字母转换为大写,每个单词的首字母小写

c# - ASP CORE有任何图表库吗?

Java - 通过添加新类而不修改任何其他内容来添加功能

c# - 使用 Min 或 Max 时如何处理 LINQ 中的空值?

c# - 在 MEF 的泛型方法中转换类

java - 如何使用反射来抽象(减少)代码以获取字段(Integer,Long,Float,Double)并进行一些计算?

带有枚举数组的 C# 反射