我有一个 Type (类型) 的实例。如何确定它是否重写了 Equals() 方法?
我有一个 Type (类型) 的实例。如何确定它是否重写了 Equals() 方法?
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
方法。
public new bool Equals(object obj)
方法,我们就会推断错误的方法。我同意目前我使用的处理方法并不好,但你知道更好的解决方案吗? - AniBindingFlags.DeclaredOnly
,你也看不到已被覆盖的方法。覆盖本身并不被认为是方法的“声明”;成员只能在最不派生的类型中声明一次,无论它在哪里出现。换句话说,这个答案完全没有回答问题。 - Peter Duniho