首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得接口方法的MethodInfo,实现类方法的MethodInfo?

如何获得接口方法的MethodInfo,实现类方法的MethodInfo?
EN

Stack Overflow用户
提问于 2009-07-11 12:38:21
回答 3查看 18.5K关注 0票数 32

我有接口方法的MethodInfo和实现接口的类的Type。我想找到实现接口方法的类方法的MethodInfo

简单的method.GetBaseDefinition()不适用于接口方法。按名称查找也不起作用,因为当显式实现接口方法时,它可以有任何名称(是的,不是在C#中)。

那么,有什么正确的方法可以涵盖所有的可能性呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-11 13:13:56

好的,我找到了一种方法,使用GetInterfaceMap

代码语言:javascript
复制
var map = targetType.GetInterfaceMap(interfaceMethod.DeclaringType);
var index = Array.IndexOf(map.InterfaceMethods, interfaceMethod);

if (index == -1)
{
    //this should literally be impossible
}

return map.TargetMethods[index];
票数 44
EN

Stack Overflow用户

发布于 2021-10-16 04:02:05

这里有一个扩展方法!

代码语言:javascript
复制
public static MethodInfo GetImplementedMethod(this Type targetType, MethodInfo interfaceMethod)
{
    if (targetType is null) throw new ArgumentNullException(nameof(targetType));
    if (interfaceMethod is null) throw new ArgumentNullException(nameof(interfaceMethod));

    var map = targetType.GetInterfaceMap(interfaceMethod.DeclaringType);
    var index = Array.IndexOf(map.InterfaceMethods, interfaceMethod);
    if (index < 0) return null;

    return map.TargetMethods[index];
    
}
票数 1
EN

Stack Overflow用户

发布于 2021-02-24 17:19:34

我用这个。

代码语言:javascript
复制
var interfacemethodParameterTypes = interfaceMethodInfo.GetParameters().Select(p => p.ParameterType).ToArray();

var map = targetType.GetInterfaceMap(interfaceMethodInfo.DeclaringType);

return map.TargetType.GetMethod(interfaceMethodInfo.Name, interfacemethodParameterTypes);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1113635

复制
相关文章

相似问题

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