Хотя приведенные выше ответы верны для версий .net до 4.0, стоит отметить, что .Net 4.0 определяет IComparable ковариантно, что означает, что если класс реализует IComparable , но не реализует явно IComparable реализация, если IComparable будет рассматриваться как реализация, если IComparable .
Обратите внимание, что это не относится к IEquatable , но поскольку производные типы не должны реализовывать IEquatable , это не должно быть проблемой.
Обратите внимание, что в отличие от IEquatable , который логически связан с реализацией семантики, очень похожей на Object.Equals (поскольку объекты, реализации GetHashCode возвращающие неравное, должны сравнивать неравное), существует ряд случаев, когда IComparable должен логически return равно, хотя IComparable должен сравнивать неравное (в таких случаях производный тип должен обычно реализовывать IComparable , но не переопределять IComparable . Обратите внимание, что если IComparable .Compare возвращает ноль, это не означает, что что объекты равны , но просто то, что ни один из них не стоит окончательно над другим.