Usted tiene que comprobar si DeclaringType
propiedad de MemberInfo
objeto (DeclaringType
hecho, mientras la clase que declara a este miembro) es igual aReflectedType
propiedad (que obtiene la clase de objeto que se utilizó para obtener esta instancia de MemberInfo
).
Además de eso, también debe verificar la propiedad IsAbstract
. Si es true
, continuación el método de inspección es definitivamente no invalida, porque "ser abstracto" significa que esta persona es una nueva declaración que no puede tener su aplicación (cuerpo) dentro de la clase actual (pero sólo en clases derivadas en su lugar).
Aquí se muestra un ejemplo del uso del método de extensión se proporciona a continuación:
Student student = new Student
{
FirstName = "Petter",
LastName = "Parker"
};
bool isOverridden = student.GetType()
.GetMethod(
name: nameof(ToString),
bindingAttr: BindingFlags.Instance | BindingFlags.Public,
binder: null,
types: Type.EmptyTypes,
modifiers: null
).IsOverridden(); // ExtMethod
if (isOverridden)
{
Console.Out.WriteLine(student);
}
Método de extensión:
using System.Reflection;
public static class MethodInfoHelper
{
/// <summary>
/// Detects whether the given method is overridden.
/// </summary>
/// <param name="methodInfo">The method to inspect.</param>
/// <returns><see langword="true" /> if method is overridden, otherwise <see langword="false" /></returns>
public static bool IsOverridden(this MethodInfo methodInfo)
{
return methodInfo.DeclaringType == methodInfo.ReflectedType
&& !methodInfo.IsAbstract;
}
}
+1 Esa es la única :) –
Esto no funcionará si el método de inspección también es abstracto. Aquí está la [explicación] (https://stackoverflow.com/a/45560768/5259296). –