问题
I have an instance of Type (type). How can I determine if it overrides Equals()?
回答1:
private static bool IsObjectEqualsMethod(MethodInfo m)
{
return m.Name == "Equals"
&& m.GetBaseDefinition().DeclaringType.Equals(typeof(object));
}
public static bool OverridesEqualsMethod(this Type type)
{
var equalsMethod = type.GetMethods()
.Single(IsObjectEqualsMethod);
return !equalsMethod.DeclaringType.Equals(typeof(object));
}
Note that this reveals whether object.Equals
has been overridden anywhere in the inheritance hierarchy of type
. To determine if the override is declared on the type itself, you can change the condition to
equalsMethod.DeclaringType.Equals(type)
EDIT:
Cleaned up the IsObjectEqualsMethod
method.
回答2:
If you enumerate all methods of a type use BindingFlags.DeclaredOnly so you won't see methods which you just inherited but not have overridden.
来源:https://stackoverflow.com/questions/3629605/determine-if-equals-is-an-override