Хммм - не уверен насчет правильного правильного способа, но вы можете сделать это, просматривая все интерфейсы вашего типа, а затем ища интерфейсы для метода. Не уверен, что вы можете сделать это напрямую без циклического перебора интерфейсов, так как вы застряли без 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 # 'er