【问题标题】:How to get MethodInfo of interface method, having implementing MethodInfo of class method?如何获取接口方法的MethodInfo,实现类方法的MethodInfo?
【发布时间】:2009-07-11 12:38:21
【问题描述】:
我有一个 interface 方法的 MethodInfo 和一个实现 interface 的 类 的 Type。
我想找到实现接口方法的类方法的MethodInfo。
简单的method.GetBaseDefinition() 不适用于接口方法。
按名称查找也不起作用,因为当显式实现接口方法时,它可以有任何名称(是的,不是在 C# 中)。
那么,涵盖所有可能性的正确方法是什么?
【问题讨论】:
标签:
c#
.net
reflection
methodinfo
【解决方案1】:
好的,我找到了一种方法,使用GetInterfaceMap。
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];
【解决方案2】:
我用这个。
var interfacemethodParameterTypes = interfaceMethodInfo.GetParameters().Select(p => p.ParameterType).ToArray();
var map = targetType.GetInterfaceMap(interfaceMethodInfo.DeclaringType);
return map.TargetType.GetMethod(interfaceMethodInfo.Name, interfacemethodParameterTypes);
【解决方案3】:
这是一个扩展方法!
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];
}