ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Шрифт:
Таблица 7.4. Члены типа Queue
Член | Описание |
---|---|
Dequeue | Возвращает объект, находящийся в начале Queue, с одновременным его удалением |
Enqueue | Добавляет объект в конец Queue |
Peek | Возвращает объект, находящийся в начале Queue, без его удаления |
Чтобы проиллюстрировать возможности этих методов, снова используем нашу автомобильную тему и построим объект Queue, моделирующий очередь автомобилей
Теперь рассмотрим следующий программный код.
Здесь в тип Queue с помощью метода Enqueue вставляются три элемента. Вызов Реек позволяет проверить, (но не удалить) первый элемент в текущем состоянии Queue, и таким элементом в данном случае является машина с именем Первая. Наконец, с помощью Dequeue элемент из очереди удаляется и посылается во вспомогательную функцию WashСar для обработки. Обратите внимание на то, что при попытке удаления элемента из пустой очереди среда выполнения генерирует исключение.
Работа с типом Stack
Тип System.Collections.Stack представляет коллекцию, в которой элементы размещаются по правилу "последним прибыл – первым обслужен". Как и следует ожидать, Stack определяет члены с именами Push и Pop (для добавления элементов в стек и удаления их из стека). В следующем примере стека используется стандартный тип System.String.
Здесь строится стек, содержащий три строковых типа (названных в соответствии с порядком их вставки). "Заглядывая" в стек, вы видите элемент, находящийся на вершине стека, поэтому первый вызов Peek выявляет третью строку. После серии вызовов Pop и Peek стек, в конечном счете, опустошается, и тогда дополнительный вызов Peek/Pop приводит к генерированию системного исключения.
Исходный код. Проект CollectionTypes размещен в подкаталоге, соответствующем главе 7.
Пространство имен System.Collections.Specialized
Кроме типов, определенных в пространстве имен System.Collections, библиотеки базовых классов .NET предлагают набор более специализированных типов, определенных в пространстве имен System.Collections.Specialized. Например, типы StringDictionary и ListDictionary обеспечивают "стилизованную" реализацию интерфейса IDictionary. Описания основных типов класса из этого пространства имен предлагаются в табл. 7.5.
Таблица 7.5. Типы пространства имен System.Collections.Specialized.
Тип | Описание |
---|---|
CollectionsUtil | Создает коллекции, игнорирующие регистр символов в строках |
HybridDictionary | Реализует IDictionary, используя ListDictionary, пока коллекция мала, и переключаясь на Hashtable, когда коллекция становится большой |
ListDictionary | Реализует IDictionary, используя однонаправленный список. Рекомендуется для коллекций, которые содержат не более десятка элементов |
NameValueCollection | Представляет отсортированную коллекцию связанных ключей и значений типа String, которые могут быть доступны или по ключу, или по индексу |
StringCollection | Представляет коллекцию строк |
StringDictionary | Реализует Hashtable с ключом, строго типизированным, как строка, а не объект |
StringEnumerator | Поддерживает простой цикл по элементам StringCollection |
Резюме
Интерфейс можно определить, как именованную коллекцию абстрактных членов. Ввиду того, что интерфейс не предлагает деталей реализаций, он обычно рассматривается, как, вариант поведения, возможного для данного типа. При реализации одного и того же интерфейса в нескольких классах вы получаете возможность обращаться с соответствующими типами одинаково (это называется интерфейсным полиморфизмом).
Для определения новых интерфейсов в C# предлагается ключевое слово interface. Любой тип может поддерживать столько интерфейсов, сколько необходимо, нужно только указать их в списке определения типа, разделяя запятыми. При этом можно создавать интерфейсы, которые оказываются производными нескольких базовых интерфейсов.