确定Equals()是否为覆盖?
我有一个Type(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
的inheritance层次结构中的任何位置被覆盖。 要确定是否在类型本身上声明了覆盖,可以将条件更改为
equalsMethod.DeclaringType.Equals(type)
编辑:清理IsObjectEqualsMethod
方法。
如果枚举类型的所有方法都使用BindingFlags.DeclaredOnly,那么您将看不到刚刚inheritance但未被覆盖的方法。