Часть II. Объектно-ориентированное программирование
Создается тип данных —
class
Dictionary
. К нему подключается уни-
версальный интерфейс
IComparable
с указанием конкретного типа:
IComparable
. Подключение неуниверсального интерфейса
IComparable
система почему-то не пропустила. Задается конкретный
метод интерфейса — метод
CompareTo()
. Это метод, по которому станут
сравниваться элементы коллекции. Мы ее создадим, пользуясь типом
Dictionary
. В метод
CompareTo()
в качестве параметра должен переда-
ваться элемент коллекции типа
Dictionary
. В методе проверяется, имеет
ли переданный объект тип
Dictionary
. Если нет, то выдается исключи-
тельная ситуация и метод завершается. Если переданный объект — объ-
ект типа
Dictionary
, то выполняется оператор сравнения текущего объ-
екта коллекции и переданного для сравнения. Результат выдается мето-
дом на его выходе. Этот метод станет вызываться методом
Sort()
класса
List
, где
Т=Dictionary
. А с помощью этого класса в основной
программе организуется коллекция из трех элементов. Коллекция на-
полняется методом
Add()
этого класса, после чего и вызывается его ме-
тод
Sort()
для сортировки элементов коллекции. Компилятор так по-
строит алгоритм работы по сортировке коллекции, что когда
Sort()
начнет работать и вызовет первый раз метод
CompareTo()
, она больше из
него не выйдет, пока вся коллекция не будет отсортирована. Взаимо-
действие
Sort()
и
CompareTo()
организуется компилятором, как говорят,
за кулисами, не видно для пользователя. При этом организуется переда-
ча методу
CompareTo()
элементов коллекции, сравнение текущего эле-
мента с предыдущим, смена мест элементов и т. д. То есть все то, что
предусматривается алгоритмом сортировки. Некоторые детали этого
механизма можно проследить в режиме отладки, прокручивая действия
CompareTo()
и наблюдая за промежуточными результатами. И еще один
интересный момент: при использовании коллекции на основе
List
применение оператора
foreach
для просмотра коллекции становится
совершенно несложным: нет необходимости организовывать работу
перечислителя, который потом надо связывать с
foreach
. Просто пи-
шется
foreach
, как будто имеем дело с обычным массивом из целых
чисел. Видимо, потому, что интерфейс
IEnumerable
реализован в самом
классе
List
.
Обобщения
Мы знаем, что все классы являются потомками одного базового класса
Object
. Когда создаются коллекции данных, то в результате различных
алгоритмических манипуляций с данными (приведением одних типов
Do'stlaringiz bilan baham: |