Далее будет указано, реализует ли объект интерфейс:
unkObj is IHasName
Это будет также, если использовать отражение от типа вместо объекта:
typeof(IHasName).IsAssignableFrom(typeof(MyClass))
Это получит метод, связанный с интерфейсом, и вызовет его с любым типом, который реализует интерфейс, с вызовом связанного метода в его классе:
MethodInfo methodIHasName = typeof(IHasName).GetMethod("GetName", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)
string name = methodIHasName.Invoke(unkObj, new object[0]);
Если вам абсолютно необходимо получить MethodInfo
из MyClass
и все, что у вас есть, это MethodInfo
интерфейса IHasName
, вы можете отобразить интерфейс следующим образом: (Спасибо @Aleeev Levenkov за ссылка)
var map = typeof(MyClass).GetInterfaceMap(methodIHasName.DeclaringType);
var index = Array.IndexOf(map.InterfaceMethods, methodIHasName);
return map.TargetMethods[index];