Г. Шилдт - С# 3.0 Полное руководство. 2010 (1160798), страница 174
Текст из файла (страница 174)
Этот интерфейс наследует от интерфейсов 1Епптегаые, 1Еппюегаые<т> и 1Со11есС1оп<Т> и поэтому является обобщенным вариантом необобшенного интерфейса 1ьтяс. Методы, определенные в интерфейсе 1птяс<т>, перечислены в табл. 24.11. В двух иэ этих методов предусматривается модификация коллекции.
Если же коллекция доступна только для чтения или имеет фиксированный размер, то методы 1пяегС () и Веюочейг () генерируют исключение НЬСЕпрроггес(ЕхсерС1оп. Таблица 24.11. Методы, определенные в интерфейсе П.йвк<Т> Описание Метод Тпг Тппехпс(Т оЬУ) Возвращает индекс первого вхождения объекта оьу в вы- зывающей коллекции. Если объект оьу не обнаружен, то метод возвращает значение -( чо1с) 1пяегг (тпг 1ох, Т оЬУ) Вставляет в вызывающую коллекцию объект оьу по ин- дексу х Пх чо1с) ПеяочеРС.(спг ТПх) Удаляет из вызывающей коллекции объект, расположен- ный по указанному индексу Тс(х Кроме того, в интерфейсе 1со11есгтоп<т> определены перечисленные ниже методы. Обратите внимание на то, что в этом обобщенном интерфейсе определено несколько больше методов, чем в его иеобобшенном аналоге.
868 Часть ((. Библиотека СЗ Кроме того, в интерфейсе 1ввяг<Т> определяется индексатор Т Свья(гпк Тс(х) ( Чек) яек) ) который устанавливает или возвращает значение элемента коллекции по указанному ин- дексу 1<)х. Интерфейс ~уудсс1 отзаду(2к, 2'~> В интерфейсе 1Р1сг1опагу<ТК, ТЧ> определяется такое поведение обобщенной коллекции, которое позволяет преобразовать уникальные ключи в соответствующие значения.
Это означает, что в данном интерфейсе определяется коллекция, в которой хранятся пары "ключ — значение". Интерфейс 1Р1ссвопагу<тк, тч> наследует от интерфейсов 1епцаегаЬ1е, 1епцаегаЬ1е<кеуча1цера1г<тк, тч» и 1со11есс1оп< кеуча1цера1г<тк, тч» и поэтому является обобщенным вариантом иеобобщенного интерфейса 1РТсгвопагу. Методы, объявленные в интерфейсе 1РТсгвопагу<ТК, ТЧ>, приведены в табл. 24.12.
Все зти методы генерируют исключение Агр цаепскц11Ехсерс1оп при попытке указать пустой ключ. таблица 24.12. методы, определенные в интерфейсе 1паоьзопаку<тк, тч> Описание Метод хогг( Аг(С (тк )г, тч т) Добавляет а вызывающую коллекцию пару "ключ-значение", определяемую параметрами А н и Генерирует исключение Агдоиепккхсерк1оп, если ключ К уже находится в коллекции Ьоо1 Сопкагпя(ТК А) Возвращает логическое значение ское, если вызывающая коллек- ция содержит объект к в качестве ключа, в противном случае— логическое значение Та1яе Ьоо1 Пеяоне(ТК )г) Удаляет нз коллекции элемент, ключ которого равен значению объекта )г Ьоо1 ТгуоеСЧа1ие(ТК )с, осс тЧ к) Предпринимает попытку извлечь значение нз коллекции по указанному ключу )г н присвоить зто значение переменной и Прн удачном исходе операции возвращается логическое значение сгое, иначе— логическое значение Та1яе, Если ключ )г не найден, переменной ч присваивается значение, выбираемое по умолчанию Кроме того, в интерфейсе 1Р1СС1опагу<ТК, ТЧ> определены перечисленные ниже свойства.
, Свойство Описание гсо11ессгоп кеуя<тк> ( сею ) 1со11есс1оп ча1иея<тч> ( сеьч ) Получает коллекцию ключей Получает коллекцию значений Следует иметь в виду, что ключи и значения, содержащиеся в коллекции, доступны отдельными списками с помощью. свойств Кеуя и Ча1цея. И наконец, в интерфейсе 1РТСС1опагу<ТК, ТЧ> определяется следующий ицдексатор: тч сьгя(тк )геу) ( Чекк яек; ) Этот ипдексатор служит для получения и установки значения элемента коллекции, а также для добавления в коллекцию нового элемента. Следует, однако, иметь в виду, что в качестве индекса в данном случае служит ключ элемента, а пе собственно индекс. Глава 24. Коллекции, перечислители и итерагоры 869 Интерфейсы хетттзшега1а1 е<т> и хеттишега гог<т> Интерфейсы 1Епивегаиуе<Т> и 1кпивегасог<Т> являются обобщенными эквивалентами рассмотренных ранее необобщенных интерфейсов 1Е пиве гаЬ1е и 1Епиве сапог.
В них объявляются аналогичные методы и свойства, да и действуют они по тому же принципу. Разумеется, обобщенные интерфейсы оперируют данными только того типа, который указывается в аргументе типа. В интерфейсе 1епивегаь1е<т> метод йегепивегасог () объявляется следующим образом: 1кпивегагог<Т> Секкпивегасог() Этот метод возвращает перечислитель типа т для коллекции.
Это означает, что он возвращает типизированн(яй перечислитель. Кроме того, в интерфейсе 1кпивегаЬ1е<Т> определяются два таких же метода, как и в необобщенном его варианте; моченехг () и еезег () . В этом интерфейсе объявляется также обобщенный вариант свойства сиггепти т си<геок ( Чещ ) Это свойство возвращает ссылку типа т на следующий объект. Это означает, что обобщенный вариант свойства Сиггепг является типизированным.
Но между интерфейсами 1кпивегагог и 1кпивегасог<Т> имеется одно различие: интерфейс 1кп иве гас ог<Т> наследует от интерфейса 1 Р1з роз аЬ1е, в отличие от интерфейса 1Кпивегасог. В интерфейсе 1сйзрозабае определяется метод Ейэроэе (), который служит для освобождения неуправляемых ресурсов.
на заллетку! В интерфейсе 1кпивегаьге<т> реализуется танже необобщенный интерфейс гкпивегаЬ1е. Это означает, что в нем поддерживается необобщенньлй вариант метода йескпиве лагос () . Кроме того, в интерфейсе гкпи негаь1е <т> реализуется необобщенный интерфейс 1 к и и в е га г о г, а следовательно, в нем поддерживаются необобщенные варианты свойства сиггепв Интерфейс 1сошрагег<т> Интерфейс 1Соврагег<Т> является обобщенным вариантом рассмотренного ранее интерфейса 1соврагег. Главное отличие между ними заключается в том, что интерфейс 1соврагег<т> обеспечивает типовую безопасность. В нем обобщенный вариант метода совраге () объявляется следующим образом: Тпс Совраге(Т оЬ11, Т оЬУЕ) В этом методе сравниваются объекты оЬ11 и оЬ1Е.
Он возвращает положительное значение, если значение объекта оЬ11 больше, чем у объекта оЬу 2; отрицательное — если значение объекта о1 меньше, чем у объекта о2; и нулевое значение — если сравниваемые значения равны. Интерфейс 1едиа1х еусошрагег<т> Интерфейс 1кк(иа11гусоврагег<Т> полностью соответствует своему необобщенному аналогу Ес(иа11сусоврагег. В нем определяются два следующих метода: Ьоог Ециаге(т оЬ11, т оЬТЕ) апс Сесиавпсок)е(т оВ1) 870 Часть П. Библиотека СЭ Метод Е<(иа1я () должен возвратить логическое значение ггие, если значения объектов оЬТ'1 и оЬ12 равны.
А метод СегнаяЛСобе () возвращает хеш-код для объекта оЬ11 Структура КеуЧа1иеРал.к(ТК, ТЧ> В пространстве имен Буягеп. Со11есгвопя. Сепегвс определена структура КеуЧа1иерэ1г<ТК, ТЧ>. Она служит для хранения ключа и его значения н применяется в классах обобщенных коллекций, в которых хранятся пары "ключ-значение", как, например, в классе Р1сг1опягу<тк, тч>. В этой структуре определяются два следующих свойства: ривзхс тК Кеу ( дегк ): риЬ11с ТЧ Ча1ие ( Чег) В этих свойствах хранятся ключ и значение соответствующего элемента коллекций. Для построения объекта типа кеуча1иерагг<тк, тч> служит конструктор ривзгс Кеуиа1иераъг(ТК )к, ТЧ и) где )< обозначает ключ, а ч — значение. Классы обобщенных коллекций Как упоминалось ранее, классы обобщенных коллекций по большей части соответствуют своим необобшенным аналогам, хотя в некоторых случаях они носят другие имена.
Отличаются они также своей организацией и функциональными возможностями. Классы обобщенных коллекций определяются в пространстве имен Буягев. Со11есг1опя. Сепег1с. В табл. 24.13 приведены классы, рассматриваемые в этой главе. Эти классы составляют основу обобщенных коллекций. Таблица 24.13. Основные классы обобщенных коллекций Класс Описание пгсг1опагу<тк, тч> Яиеие<т> Боггеппъсггопагу<тк, тч> Боггейг1яг<ТК, ти> Бгасх<Т> Наяьяег<Т> 11пкеиьъяг<Т> ъдяг<т> Сохраняет пары "ключ-значение". Обеспечивает такие же функциональные возможности, как и необобщенный класс Наяьгаъ1е Сохраняет ряд уникальных значений, используя хеш-таблицу Сохраняет элементы в двунаправленном списке Создает динамический массив.
Обеспечивает такие же функциональные воэможности, как и необобщенный класс йггаугъяг Создает очередь. Обеспечивает такие же функциональные возможности, как н необобщенный класс ()иеие Создает отсортированный список из пар "ключ-значение" Создает отсортированный список из пар "ключ-значение". Обеспечивает такие же функциональные возможности, как и необобщенный класс Боггеиьгяг Создает стек. Обеспечивает такие же функциональные воз- можности, как и необобщенный класс агась Глава 24.
Коллекции, леречислигели и нтераторы 871 На заметку! В пространстве имен БузСеп.Со11есхгопз.цепег1с находятся также следующие классы: класс Бупс)ггоп1ге()Со11есссоп<Т> синхронизированной коллекции на основе класса 111зс<т>; класс Бупспгоп1гег(неапоп1усо11есс1оп<т> доступной только для чтения синхронизированной коллекции на основе класса 11.1ас<Т>; абстрактный класс Бупс)ггоп1гег(кеусо11есс1оп<к, у>, служащий в качестве базового для класса коллекции Буасеп.зегч1семог(е1.0г1зс)гепекеуег)Со11есс1оп; а также класс кеуепвутуресо).).ессйоп<т> коллекции, в хоторой е каче<геле ключей используются отдельные типы данных.
Класс у.дяВ<т> В классе Е1БС<т> реализуется обобщенный динамический массив. Он ничем принципиально не отличается от класса необобщенной коллекции йггауЕ1БС. В этом классе реализуются интерфейсы 1Со11есС1оп, 1Со11есСгоп<Т>, 1Ь1БС, 111БС<Т>, 1ЕпппегаЫе и 1ЕппюегаЫе<Т>. У класса ЕТБС<Т> имеются такие конструкторы: рпЫ1с ЬТзС () рпЫго Сваг (1ЕпшпегаЫе<Т> с) рпЫ1< Ылг (1пг емкость) (аблица 24.14. Наиболее употребительные методы, определенные в классе И.ас<т> Описание Метод рпЫгс т1ггпа1 чола Добавляет элементы из коллекции с в конец вызывающей лгыяапое (1со11есс1оп с) коллекции типа Аггауссзс Выполняет поиск в вызывающей коллекции значения ч. Возвращает индекс найденного элемента.
Если искомое значение не найдено, возвращается отрицательное значе- ние. Вызывающий список должен быть огсоргирован рпЫ1с ч1гспа1 гпс ВгпагуБеагсп(Т ч) рпЫ1с гпС В1пагузеагсп(Т 1Сопрагег<Т> соглр) Выполняет поиск в вызывающей коллекции значения ю используя для сравнения указанный метод сопр. Возвращает индекс найденного элемента. Если искомое значение не найдено, возвращается отрицательное значе- ние. Вызывающий список должен быть отсортирован рпЫ1с СвзС<Т> Оегпапде(1пг 1с(х, 1пС сопл г) Возвращает часть вызывающей коллекции. Часть воз- вращаемой коллекции начинается с элемента, указывае- мого по индексу гг(х, и включает количество элементов, определяемое параметром соппс.