virtuales sobreescrito poo new must modificador metodos metodo example c# .net reflection methodinfo

c# - sobreescrito - ¿Cómo obtener MethodInfo del método de interfaz, teniendo implementado MethodInfo of class method?



public void override c# (2)

Tengo un MethodInfo de un método de interfaz y el Type de una clase que implementa la interfaz . Quiero encontrar MethodInfo del método de clase que implementa el método de interfaz.

El method.GetBaseDefinition() simple. method.GetBaseDefinition() no funciona con los métodos de interfaz. La búsqueda por nombre tampoco funcionará, porque al implementar el método de interfaz explícitamente puede tener cualquier nombre (sí, no en C #).

Entonces, ¿cuál es la forma correcta de hacerlo que cubre todas las posibilidades?


Hmmm: no estoy seguro de la forma correcta , pero puede hacerlo pasando por todas las interfaces de su tipo y luego buscando en las interfaces el método. No estoy seguro si puede hacerlo directamente sin el bucle a través de las interfaces, ya que está un poco atrapado sin GetBaseDefinition ().

Para mi interfaz con un solo método (MyMethod) y mi tipo (MyClass) que implementa este método, puedo usar esto:

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

Debería comprobar que MethodInfo.Equals funciona si los dos métodos tienen diferentes nombres. Ni siquiera sabía que eso fuera posible, probablemente porque soy un C # er


OK, encontré una forma, usando 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];