Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Determine method that implements/overrides interface using reflection in .NET [duplicate]

I have a MethodInfo of an interface method and Type of a class that implements the interface. I want to find the MethodInfo of the class method that implements the interface method.

The simple method.GetBaseDefinition() does not work with interface methods. Lookup by name won't work either, because when implementing interface method explicitly it can have any name (yes, not in C#).

So what is the correct way of doing that that covers all the possibilities?

like image 593
Krzysztof Kozmic Avatar asked Feb 20 '26 18:02

Krzysztof Kozmic


2 Answers

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];
like image 189
Krzysztof Kozmic Avatar answered Feb 22 '26 08:02

Krzysztof Kozmic


Here's an extension method!

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];
    
}
like image 38
Nill Avatar answered Feb 22 '26 07:02

Nill



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!