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.