首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果我有继承类类型的MethodInfo,如何获取接口的MethodInfo?

如果我有继承类类型的MethodInfo,如何获取接口的MethodInfo?
EN

Stack Overflow用户
提问于 2013-01-31 16:34:14
回答 3查看 3K关注 0票数 6

我在一个类类型上有一个方法的MethodInfo,它是该类实现的接口定义的一部分。

如何在类实现的接口类型上检索方法的匹配MethodInfo对象?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-31 16:49:22

我想我找到了最好的方法:

代码语言:javascript
复制
var methodParameterTypes = classMethod.GetParameters().Select(p => p.ParameterType).ToArray();
MethodInfo interfaceMethodInfo = interfaceType.GetMethod(classMethod.Name, methodParameterTypes);
票数 4
EN

Stack Overflow用户

发布于 2017-08-04 22:45:52

对于显式实现的接口方法,按名称和参数查找将失败。这段代码应该也能处理这种情况:

代码语言:javascript
复制
private static MethodInfo GetInterfaceMethod(Type implementingClass, Type implementedInterface, MethodInfo classMethod)
{
    var map = implementingClass.GetInterfaceMap(implementedInterface);
    var index = Array.IndexOf(map.TargetMethods, classMethod);
    return map.InterfaceMethods[index];
}
票数 3
EN

Stack Overflow用户

发布于 2013-01-31 16:40:58

如果想要从类实现的接口中查找方法,应该可以使用下面这样的方法

代码语言:javascript
复制
MethodInfo interfaceMethod = typeof(MyClass).GetInterfaces()
                .Where(i => i.GetMethod("MethodName") != null)
                .Select(m => m.GetMethod("MethodName")).FirstOrDefault();

或者,如果您想从类实现的接口中获取方法,您可以这样做。

代码语言:javascript
复制
    MethodInfo classMethod = typeof(MyClass).GetMethod("MyMethod");

    MethodInfo interfaceMethod = classMethod.DeclaringType.GetInterfaces()
        .Where(i => i.GetMethod("MyMethod") != null)
        .Select(m => m.GetMethod("MyMethod")).FirstOrDefault();
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14621451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档