代码之家  ›  专栏  ›  技术社区  ›  lance

确定Equals()是否为重写?

  •  3
  • lance  · 技术社区  · 14 年前

    我有一个类型(Type)的实例。如何确定它是否覆盖Equals()?

    2 回复  |  直到 14 年前
        1
  •  6
  •   Ani    14 年前
    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

        2
  •  -1
  •   codymanix    14 年前

    如果枚举一个类型的所有方法,请使用BindingFlags.DeclaredOnly仅限因此,您不会看到刚刚继承但尚未重写的方法。