Часть II. Объектно-ориентированное программирование
// Вывод возрастов (это значения) людей в словаре
Console.WriteLine("Вывод значений словаря");
foreach (Int32 age in d.Values)
Console.WriteLine(age);
Console.Read();
}
}
}
Рис. 12.4.
Создание и обработка словаря (результат)
В программе создается класс
SimpleDictionary
из интерфейса
IDictionary
. В классе задаются поля
private DictionaryEntry[] items;
private Int32 ItemsInUse = 0;
Поле
items
— это обычный массив. Количество его элементов опреде-
ляется конструктором. Поле
ItemsInUse
будет играть роль индекса мас-
сива. Далее в самом классе определяются (задаются) члены интерфейса
IDictionary
. По правилам C# члены подключаемых к классу интерфей-
сов должны получить свою конкретную реализацию в классе, который
их наследует, потому что в интерфейсе такие члены заданы не конкрет-
но, а абстрактно. Здесь же определяется индексатор — свойство, кото-
рое вызывается из основной программы, как только она начинает
выполнять поиск элемента массива по индексу. Индексатор как раз фи-
зически и осуществляет эту работу. В этом же блоке создается вспомо-
гательный класс
SimpleDictionaryEnumerator
путем наследования ин-
Глава 12. Коллекции. Обобщения
253
терфейса
IDictionaryEnumerator
, члены которого определяются в этом
классе и в дальнейшем послужат работе оператора цикла
foreach
. Затем
определяются члены интерфейса
ICollection
, т. к. некоторые члены
IDictionary
имеют тип
ICollection
. В частности, свойства
Keys
(ключи)
и
Values
(значения). И, наконец, определяется единственный член
интерфейса
IEnumerable
, который создает перечислитель типа
IEnumerator
, необходимый для работы оператора цикла
foreach
.
Далее работает основная программа. В ней конструктором создается
объект
d
— массив из трех элементов, который затем наполняется кон-
кретными элементами. Это пары типа "ключ — значение". То есть
обычный словарь. Ключом служат имена людей, значениями — их воз-
раст. Добавка в массив происходит методом
add()
— членом интерфей-
са
IDictionary
. Членами этого же интерфейса выполняются действия по
выводу на экран количества элементов в словаре, проверка, содержится
ли ключ "Иван" в словаре, и определяется возраст человека с именем
Иван. В последнем случае поиск строки с ключом "Иван" происходит
по индексу. Именно в этом месте основная программа вызывает свойст-
во "индексатор", чтобы с его помощью найти соответствующую стро-
ку в словаре: индексатор ищет в словаре с помощью метода
TryGetIndexOfKey()
по ключу соответствующую строку, определяет ее
индекс в массиве и по индексу извлекает из массива значение элемента,
т. е. возраст. После этого в основной программе демонстрируется рабо-
та члена интерфейса
IDictionary
по удалению строк из словаря.
Далее в основной программе выводится на экран содержимое словаря
парами "ключ — значение". Здесь применяется оператор
foreach
, кото-
рый и требует наличия двух интерфейсов —
IEnumerator
и
IEnumerable
.
Детальные комментарии даны по тексту программы. Однако для лучше-
го понимания механизма работы всех элементов программы рекоменду-
ется ее прокрутить в режиме отладки, начиная с первой строки основ-
ной программы. Напомним, что при пошаговой отладке продвижение по
операторам выполняется нажатием клавиши , вход вовнутрь
строки (если это вызов метода) — клавишей , дальнейшее про-
движение по строкам метода — или , исполнение всех
команд до следующей точки останова — клавишей . Просмотр со-
держимого переменных осуществляется наведением курсора мыши на
имя переменной: через некоторое время появятся результаты, выдавае-
мые подсказчиком среды разработки.
254
Do'stlaringiz bilan baham: |