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

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

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

那么正确的做法是什么,涵盖所有可能性?

好的,我找到了一种方法,使用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]; 

嗯 – 不确定正确的方法,但你可以通过遍历你的类型的所有接口,然后在接口上搜索方法来做到这一点。 不知道你是否可以直接执行它而不通过接口循环,因为你没有GetBaseDefinition()就好了。

对于我使用单个方法(MyMethod)和我实现此方法的类型(MyClass)的接口,我可以使用:

 MethodInfo interfaceMethodInfo = typeof(IMyInterface).GetMethod("MyMethod"); MethodInfo classMethodInfo = null; Type[] interfaces = typeof(MyClass).GetInterfaces(); foreach (Type iface in interfaces) { MethodInfo[] methods = iface.GetMethods(); foreach (MethodInfo method in methods) { if (method.Equals(interfaceMethodInfo)) { classMethodInfo = method; break; } } } 

如果两个方法具有不同的名称,则必须检查MethodInfo.Equals是否有效。 我甚至不知道那是可能的,可能因为我是C#呃