How to get MethodInfo of interface method, having implementing MethodInfo of class method?

ぃ、小莉子 提交于 2019-11-27 04:46:46

OK, I found a way, using 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];

Hmmm - not sure about the correct way, but you can do it by looping through all the interfaces on your type, and then searching the interfaces for the method. Not sure if you can do it directly without the looping through the interfaces, as you're kinda stuck without GetBaseDefinition().

For my interface with a single method (MyMethod) and my type (MyClass) which implements this method I can use this:

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;
        }
    }
}

You'd have to check that the MethodInfo.Equals works if the two methods have different names. I didn't even know that was possible, probably cos I'm a C#'er

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!