Г. Шилдт - С#4.0 Полное руководство (1160795), страница 194
Текст из файла (страница 194)
Библиатека С(г А поскольку интерфейс 1Со11еспйоп<Т> наследует от интерфейсов 1ЕпцглегаЬ1е и 1ЕпцжегаЬ1е<Т>, то он включает в себя также обобщенную и необобщенную формы метода сесепцте тасос () . Благодаря тому что в интерфейсе 1со11есС1оп<Т> реализуется интерфейс 1ЕппнегаЬ1е<Т>, в нем поддерживаются также методы расширения, определенные в классе ЕпивегаЬ1е. Несмотря на то что методы расширения предназначены главным образом для поддержки (.)Х( ь им можно найти и другое применение, в том числе и в коллекциях. Интерфейс ТЕТв С<Т> В интерфейсе 111яс<т> определяется такое поведение обобщенной коллекции, которое позволяет осуществлять доступ к ее элементам по индексу с отсчетом от нуля. этот интерфейс наследует от интерфейсов 1епцвегаь1е, 1еппвегаь1е<т> и 1Со11есс1оп<т> и поэтому является обобщенным вариантом необобщенного интерфейса 1ейяс.
методы, определенные в интерфейсе 111яс<т>, перечислены в табл. 25.11. В двух из этих методов предусматривается модификация коллекции. Если же коллекция доступна только для чтения или имеет фиксированный размер, то методы 1пяегп () и КевочеАС () генерируют исключение Носепррогпес(ЕхсерС1оп. таблица 25.11. методы, определенные в интерфейсе тейв с<т> Описание Метод Тпг 1пс(ехОЙ(Т 1Сегя) Возвращает индекс первого вхождения элемента 1 сев в вызывающей комекции. Если элемент 1 Сегл не обнаружен, то метод возвращает значение -1 чо1с( 1пяегс (1пс 1пс(ех, Вставляет е вызывающую коллекцию элемент усев по Т 1Сеж) индексу Тпдех чо1г( кевочедс (1пс 1пс)ех) удаляет из вызывающей комекции элемент, расположенный по указанному индексу 1пс)ех Кроме того, в интерфейсе 111яп<Т> определяется индексатор т Снья (Тпг 1пг(ех) ( деш яеш ) который устанавливает или возвращает значение элемента коллекции по указанному индексу 1п г(ех.
Интерфейс 1Шс51опаку<ТКеу, Т7а1це> В интерфейсе 1ПТсп1опагу<ТКеу, Туа1пе> определяется такое поведение обобщенной коллекции, которое позволяет преобразовать уникальные ключи в соответствующие значения. Это означает, что в данном интерфейсе определяется коллекция, в которой хранятся пары "ключ — значение". Интерфейс 1)З1сС1опагу<ТКеу, Туа1ие> наследует от интерфейсов 1еппглегаь1е, 1еппвегаЬ1е<кеуча1пеРадг<ткеу, Туа1це» и 1Со11есг1оп<Кеууа1цеРайг<ТКеу, ТЧа1пе» и поэтому является обобщенным вариантом необобщенного интерфейса Тпйсс1опагу. Методы, объявленные в интерфейсе 1О1ссйопагу<ТКеу, тча1пе>, приведены в табл. 25.12. Все эти методы генерируют исключение Агдивеппн ц11Ехсерг1оп при попытке указать пустой ключ.
Глава 25. Коллекции, перечислитали и итераторы 957 Таблица 25.12. Методы, определенные в интерфейсе ХОТовйопвку<ТКеу, Тттв1це> Описание Метод Добавляет в вызывающую коллекцию пару "ключ- значение", определяемую параметрами )геу и та1 ив. Генерирует исключение дгощвепСЕхсерт1оп, если ключ ]геу уже находится в коллекции Возвращает логическое значение тгпе, если вызывающая коллекция содержит элемент ]геу в качестве ключа, а иначе — логическое значение Та1зе Удаляет из коллекции элемент, ключ которого равен значению Хеу Предпринимает попытку извлечь значение из коллекции по указанному ключу )геу и присвоить зто значение переменной иа1ие.
При удачном исходе операции возвращается логическое значение схче, а иначе — логическое значение Та1зе. Если ключ Хеу не найден, переменной та1ие присваивается значение, выбираемое по умолчанию чохс] Дг]с](ТКеу ]геу, ТЧа1ое та1ие) Ьоо1 Соптатпз(ТКеу Хеу] Ьоо1 Еевоче(ткеу Хеу) Ьоо1 ТхуоеСЧа1ое(ТКеу )геу, огас ТЧа1ое иа1ие) Кроме того, в интерфейсе 1(]1сттопату<ткеу, тча1ие> определены перечисленные ниже свойства. Свойство Описание тсо11есстоп кеуз<ткеу> ( Вес; ] Получает коллекцию ключей 1со11есслоп уа1пез<ТЧа1ое> ( Вес; ] Получает коллекцию значений Интерфейсы 1ЕпщаекаЫе<Т> и 1Епив)екабох<Т> Интерфейсы 1ЕпппетаЬ1е<Т> и 1Епивегагог<Т> являются обобщенными эквивалентами рассмотренных ранее необобщенных интерфейсов 1ЕппвегаЬ1е и ТЕпщлегатог. В них объявляются аналогичные методы и свойства, да и действуют они по тому же принципу.
Разумеется, обобщенные интерфейсы оперируют данными только того типа, который указывается в аргументе типа. В интерфейсе 1еоиыегаь1е<т> метод сесеппыетасог () объявляется следующим образом. твпчеетасох<т> Сетепьххетасог() Этот метод возвращает перечислитель типа Т для коллекции. А это означает, что он возвращает типизированный перечислитель. Следует иметь в виду, что ключи и значения, содержащиеся в коллекции, доступны отдельными списками с помощью свойств Кеуз и Ча1оез.
И наконец, в интерфейсе 1о1сстопагу<ткеу, тча1пе> определяется следующий индексатор. ТЧа1пе СЬТз[ТКеу Хеу] ( дет; зет; Этот индексатор служит для получения и установки значения элемента коллекции, а также для добавления в коллекцию нового элемента. Следует, однако, иметь в виду, что в качестве индекса в данном случае служит ключ элемента, а не сам индекс. 958 Часть И. Библиотека С(т Кроме тото, в интерфейсе 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ЬТСошрагег<Т> Интерфейс 1ес(па11ьусоврагег<т> полностью соответствует своему необобщенному аналогу Ет)па11СуСоврагег. В нем определяются два следующих метода. Ьоо1 Еяиа1я(т х, Т у) ьпг Сегиаяпоопе(Т оЬУ) Метод Ес(иа1я () должен возвратить логическое значение ггпе, если значения объектов х и у равны. А метод СеснаяЬСос)е () возвращает хеш-код для объекта оЬт1 Если два сравниваемых объекта равны, то их хеш-коды также должны быть одинаковы. Интерфейс 13в Ь<Т> Интерфейс 1эес<Т> был добавлен в версию 4.0 среды .НЕТ Егашетчог)с. Он определяет поведение обобщенной коллекции, реализующей ряд уникальных элементов.
Этот интерфейс наследует от интерфейсов 1ЕппвегаЬ1е, 1ЕппвегаЬ1е<Т>, а также 1Со11есС1оп<Т>. В интерфейсе 1Яеп<т> определен ряд методов, перечисленных Глава 25. Коллекции, перечислители и итераторы 959 Таблица 25.13. Методы, определенные в интерфейсе 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е<Т> сСЛег) ьсс1 яесеспа1з(1еппвегаь1е<т> сСЛег) чсТС Яуввегг1свхсерСХ>СЬ (1епивегаь1е<т> ссЛег) тсхц Оп1спХТСЬ(1ЕппвегаЫе<Т> ссбег) в табл.
25.13. Обратите внимание на то, что параметры этих методов указываются как относящиеся к типу 1Еппве гаЬ1е<Т>. Это означает, что в качестве второго аргумен- та методу можно передать нечто, отличающееся от объектов типа 1ЯеС<Т>. Но чаще всего оба аргумента оказываются экземплярами объектов типа 1ЯеС<т>. 9бо Часть П. Библиотека С№ Структура КеуЧа1иеРа1х(ТКеу, ТЧа1тзе) В пространстве имен Буятет. со11есттопя. Оепеттс определена структура Кеууа1иера1т<ткеу, ТЧа1се>. Она служит для хранения ключа и его значения и применяется в классах обобщенных коллекций, в которых хранятся пары "ключ— значение", как, например, в классе 01сттопату<ткеу, тча1це>.