When a class implements the ``++IEquatable<T>++`` interface, it enters a contract that, in effect, states "I know how to compare two instances of type T or any type derived from T for equality.". However if that class is derived, it is very unlikely that the base class will know how to make a meaningful comparison. Therefore that implicit contract is now broken.
Alternatively ``++IEqualityComparer<T>++`` provides a safer interface and is used by collections or ``++Equals++`` could be made ``++virtual++``.
This rule raises an issue when a unsealed, ``++public++`` or ``++protected++`` class implements ``++IEquitable<T>++`` and the ``++Equals++`` is neither ``++virtual++`` nor ``++abstract++``.