Определить, является ли Equals () переопределением? - PullRequest
3 голосов
/ 02 сентября 2010

У меня есть экземпляр типа (тип).Как я могу определить, переопределяет ли он Equals ()?

Ответы [ 2 ]

6 голосов
/ 02 сентября 2010
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.

0 голосов
/ 02 сентября 2010

Если вы перечислите все методы типа, используйте BindingFlags.DeclaredOnly, чтобы не видеть методы, которые вы только что унаследовали, но не переопределили.

...