我有一个Type(type)的实例。如何确定它是否覆盖Equals()?
答案 0 :(得分:6)
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));
}
请注意,这会在object.Equals
的继承层次结构中显示type
是否已在任何位置被覆盖。要确定是否在类型本身上声明了覆盖,可以将条件更改为
equalsMethod.DeclaringType.Equals(type)
编辑:
清理了IsObjectEqualsMethod
方法。
答案 1 :(得分:0)
如果枚举类型的所有方法,请使用BindingFlags.DeclaredOnly,这样您就不会看到刚刚继承但未被覆盖的方法。