Czy ważne jest zastąpienie równości, jeśli implementuję program IEquatable <T>?

Znam znaczenie nadpisywaniaGetHashCode przy wdrażaniu niestandardowych kontroli równości - dla których wdrożyłemIEquality<T> interfejs, a także różnica między rodzajową i nietypowąEquals jak omówiono tutaj. Teraz jest punkt do nadpisaniaEquals(object t)? Czy wszystko nie byłoby ogólneEquals(T t)?

public override int GetHashCode() //required for hashsets and dictionaries
{
    return Id;
}

public bool Equals(T other) //IEquatable<T> here
{
    return Id == other.Id;
}

public override bool Equals(object obj) //required??
{
    return Equals(obj as T);
}

questionAnswers(3)

yourAnswerToTheQuestion