ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Упорядоченность объектов и интерфейс IComparableЧасто, когда создается класс, желательно задать отношение порядка на его объектах. Такой класс следует объявить наследником интерфейса IComparable. Этот интерфейс имеет всего один метод CompareTo (object obj), возвращающий целочисленное значение, положительное, отрицательное или равное нулю, в зависимости от выполнения отношения "больше", "меньше" или "равно". Как правило, в классе вначале определяют метод CompareTo, а после этого вводят перегруженные операции, чтобы выполнять сравнение объектов привычным образом с использованием знаков операций отношения. Давайте введем отношение порядка на классе Person, рассмотренном в лекции 1, сделав этот класс наследником интерфейса IComparable. Реализуем в этом классе метод интерфейса CompareTo: public class Person:IComparable { public int CompareTo(object pers) { const string s = "Сравниваемый объект не принадлежит классу Person"; Person p = pers as Person; if (!p.Equals(null)) return (fam.CompareTo(p.fam)); throw new ArgumentException (s); } // другие компоненты класса } Поскольку аргумент в методе интерфейса принадлежит типу object, перед выполнением сравнения его нужно привести к типу Person. Для приведения используется операция as, позволяющая проверить корректность выполнения приведения. Если приведение невозможно, то невозможно выполнить и сравнение объектов. В этом случае выбрасывается исключение, которое может обработать разумным образом только клиент класса, пытавшийся выполнить сравнение. В самом классе Person можно только пояснить ситуацию, передав информацию объекту исключения. Заметьте также, что при проверке на значение null используется отношение Equals, а не обычное равенство, которое будет переопределено. Не нашли, что искали? Воспользуйтесь поиском:
|