Проблема с перегрузкой операторов
К сожалению, интерфейсы не могут содержать перегруженные операторы.Попробуйте набрать это в вашем компиляторе:
public interface IInequalityComaparable<T>
{
bool operator >(T lhs, T rhs);
bool operator >=(T lhs, T rhs);
bool operator <(T lhs, T rhs);
bool operator <=(T lhs, T rhs);
}
Я не знаю, почему они этого не допустили, но я предполагаю, что это усложнило определение языка и было бы сложно для пользователей правильно реализовать.
Либо так, либо дизайнерам не понравился потенциал злоупотреблений.Например, представьте, что вы делаете >=
сравнение с class MagicMrMeow
.Или даже на class Matrix<T>
.Что означает результат о двух значениях ?;Особенно, когда может быть неоднозначность?
Официальный обходной путь
Поскольку приведенный выше интерфейс недопустим, у нас есть интерфейс IComparable<T>
для обходаэта проблема.Он не реализует никаких операторов и предоставляет только один метод: int CompareTo(T other);
См. http://msdn.microsoft.com/en-us/library/4d7sx9hd.aspx
Результат int
на самом деле является трехбитным или тринарным (аналогичноBoolean
, но с тремя состояниями).В этой таблице объясняется значение результатов:
Value Meaning
Less than zero This object is less than
the object specified by the CompareTo method.
Zero This object is equal to the method parameter.
Greater than zero This object is greater than the method parameter.
Использование обходного пути
Чтобы сделать эквивалент value >= _minimumValue
, вместо этого необходимо написать:
value.CompareTo(_minimumValue) >= 0