Г. Шилдт - С#4.0 Полное руководство (1160795), страница 187
Текст из файла (страница 187)
Это метод Бе ТЕп шлет а То г (), объявляемый следующим образом. тпаипегагог Сегвпаглегагог О Он возвращает перечислитель для коллекции. Вследствие того же наследования от интерфейса 1ЕпцвтегаЬ1е в интерфейсе 1Со11есТзоп определяются также четыре следующих метода расширения: АэРага11е1 (), АэбаегуаЬ1е (), СаяТ () и Огтуре () . В частности, метод дэРага11е1 () объявляется в классе Бузсегл.
Е1пд. Рага11е1ЕпивтегаЬ1е, метод АэдпегуаЬ1е ()— в классе Буэсегл. Е1пд. СаегуаЬ1е, а методы Саас () и Оттуре () — в классе Бувсеа. Ьйпд. ЕпшпегаЬ1е. Эти методы предназначены главным образом для поддержки ЕПЩ, хотя их можно применять и в других целях. Интерфейс 1ЫаТ В интерфейсе 1Е1э Т объявляется такое поведение необобщенной коллекции, которое позволяет осуществлять доступ к ее элементам по индексу с отсчетом от нуля. Этот интерфейс наследует от интерфейсов 1Со11есТТоп и 1ЕпцтегаЬ1е. Помимо методов, определенных в этих интерфейсах, в интерфейсе 1Е1эТ определяется ряд собственных методов.
Все эти методы сведены в табл. 25.2. В некоторых из них предусматривается модификация коллекции. Если же коллекция доступна только для чтения или имеет фиксированный размер, то в этих методах генерируется исключение НоТБпррогсес(ЕхсерТ1оп. Таблица 25.2. Методы, определенные в интерфейсе 1Е1вТ Описание Метод Рпс АБО(оЬбесТ тга1ие) Добавляет объект «а1ие в вызывающую коллекцию. Возвращает индекс, по которому этот объект сохраняется чогс( С1еаг() Удаляет все элементы из вызывающей коллекции Ьоо1 Сопта1пэ (оЬ1есТ ка1ие) Возвращает логическое значение тгое, если вызывающая коллекция содержит объект иа1ие, а иначе — логическое значение га1эе 928 Часть (1. библиотека С(г Окончание табл. 25.2 Метод Описание Возвращает индекс объекта ка1ие, если згот объект содержится в вызывающей комекции.
Если же объект оа1ие не обнаружен, то метод возвращает значение -1 Вставляет в вызывающую комекцию объект ка1се по индексу дпс)ех. Элементы, находившиеся до этого по индексу дпдех и дальше, смещаются вперед, чтобы освободить место для вставляемого объекта оа1ие Удаляет первое вхождение объекта оа1ие в вызывающей комекции. Элементы, находившиеся до этого за удаленным элементом, смещаются назад, чтобы устранить образовавшийся "пробел" Удаляет из вызывающей комекции объект, расположенный по указанному индексу дпс(ех. Элементы, находившиеся до этого за удаленным элементом, смещаются назад, чтобы устранить образовавшийся "пробел" дпг 1пс)ехОЙ (ЬЬ) ест оа1не) чо1с( 1пзегг (1пг успех, оЬ]ест ка1ие) но1г( Веточе(оЬ2есс оа1ие) чотб НеточеАС(ьпс 1пе(ех) Объекты добавляются в коллекцию типа 111зс вызовом метода Ас)е( () .
Обратите внимание на то, что метод Аг)с) ( ) принимает аргумент типа оЬб ес Ь. А поскольку оЬб ест является базовым классом для всех типов, то в необобщенной коллекции может быть сохранен объект любого типа, включая и типы значений, в силу автоматической упаковки и распаковки. Для удаления элемента из коллекции служат методы Аепоче () и неыочеАЬ () . В часгносчи, метод Аеточе ( ) удаляет указанный объект, а метод Аевоъ.едс ( ) удаляет объект по указанному индексу.
И для опорожнения коллекции вызывается метод С1еаг () . Для того чтобы выяснить, содержится ли в коллекции конкретный объект, вызывается метод С оп садня ( ) . Для получения индекса объекта вызывается метод 1пс(ехОг (), а для вставки элемента в коллекцию по указанному индексу — метод 1пвегг () . В интерфейсе 1ъдэг определяются следующие свойства. Ьоо1 1зт1хеозьхе ( Чем Ьоо1 1зяеае)ОЬ1у ( деш ) оЬ)ест Сиьз(1пс 1поех) ( Чем зеш Этот индексатор служит для получения и установки значения элемента коллекции. Но его нельзя использовать для добавления в коллекцию нового элемента.
С этой целью обычно вызывается метод Ас(с( ( ) . Как только элемент будет добавлен в коллекцию, он станет доступным посредством индексатора. Если коллекция имеет фиксированный размер, то свойство 1эк1хес(Бахе содержит логическое значение Ь где. Это означает, что в такую коллекцию нельзя ни вставлять элементы, ни удалять их из нее. Если же коллекция доступна только для чтения, то свойство 1 з Аеас(Оп 1 у содержит логическое значение Ь гпе. Это означает, что содержимое такой коллекции не подлежит изменению. Кроме того, в интерфейсе 1ьдэ с определяется следующий индексатор.
Глава 25. Камекции, яеречислители и итераторы 929 Интерфейс 1РзсЬ1опаку Таблица 25.3. Методы, определенные в интерфейсе 1РЕоцйопаку Метод Описание Добавляет в вызывающую коллекцию пару "ключ- значение", определяемую параметрами )геу и ча1ие Удаляет все пары "ключ-значение" из вызывающей коллекции Возвращает логическое значение сгпе, если вызываю- щая коллекция содержит объект )геу в качестве ключа, в противном случае — логическое значение га1зе Возвращает перечислитель для вызывающей коллек- ции Удаляет из коллекции элемент, ключ которого равен зна- чению параметра )геу чозс[ Ас[с[(оЬ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Со11есгуоп и 1ЕппиегаЬ1е. Методы, объявленные в интерфейсе 1Р1сгзопагу, сведены в табл. 25.3. Некоторые из них генерируют исключение дгвпиепснп11Ехсерскоп при попытке указать пустой ключ, поскольку пустые ключи не допускаются. 930 Часть!1. Библиотека С№ Этот индексатор служит для получения и установки значения элемента коллекции, а также для добавления в коллекцию нового элемента. Но в качестве индекса в данном случае служит ключ элемента, а не собственно индекс.
Интерфейсы 1ЕппвегаЬ1е, 1Епцвегасог и 101ссйопагуЕпцвегасог Интерфейс 1ЕппвегаЬ1е является необобщенным, и поэтому он должен быть реализован в классе для поддержки перечислителей. Как пояснялось выше, интерфейс 1ЕппвегаЬ1е реализуется во всех классах необобщенных коллекций, поскольку он наследуется интерфейсом 1Со11есс1оп. Ниже приведен единственный метод беГЕпшаегасог (), определяемый в интерфейсе 1ЕппвегаЬ1е. 1Епивегасог Сескпивегасог() Он возвращает коллекцию.
Благодаря реализации интерфейса 1ЕппыегаЬ1е можно также получать содержимое коллекции в цикле Тогеасп. В интерфейсе 1Епгвве гасо г определяются функции перечислителя. С помощью методов этого интерфейса можно циклически обращаться к содержимому коллекции. Если в коллекции содержа1ся пары "ключ-значение" (словари), то ма~од Пе СЕпшпега сох () возвращает объект типа 1Р1СГТопагуЕппые гасо г, а петипа 1Еппвегасог. Интерфейс 1РТСС хопа гуЕппвегасот наследует от интерфейса 1Епшвехагог и вводит дополнительные функции, упрощающие перечисление словарей.
В интерфейсе 1епшаегагог определяются также методы иоченехг () и ееаег () и свойство Сиггепс. Способы их применения подробнее описываются далее в этой главе. А до тех пор следует отметить, что свойство Спггепс содержит элемент, получаемый в текущий момент. Метод моченехс ( ) осуществляет переход к следующему элементу коллекции, а метод невес () возобновляет перечисление с самого начала. Интерфейсы 1Соврагег и 1Есуза11гуСоврагег В интерфейсе 1Соврагег определяется метод Сопраге () для сравнения двух объектов. ьпг Соараге(оЬ)есг х, оЬ)ест у) Он возвращает положительное значение, если значение объекта х больше, чем у объекта у; отрицательное — если значение объекта х меньше, чем у объекта у; и нулевое — если сравниваемые значения равны.
Данный интерфейс можно использовать для указания способа сортировки элементов коллекции. В интерфейсе 1ЕЧпа11суСоврагег определяются два метода. Ьоо1 ЕЧиа1з(оЬ)есг х, оЬ)ест у) Тпс оесиавЬСопе(оЬ)есс оЬ№) Метод еоиа1в () возвращает логическое значение ггие, если значения объектов х и у равны. А метод СегназЬСос(е () возвращает хеш-код для объекта оЬу1 Интерфейсы 1ЯсгцссигаХСсврагаЬ1е и 1Ясгцссцга1ЕгрзасаЬ1е Оба интерфейса 1эсгпсснга1СоырагаЬ1е и 1эсгпсспга1ЕЧпасаЬ1е добавлены в версию 4.0 среды .)х)ЕТ Егашетчог)с В интерфейсе 1Яггисс ага1СоырагаЬ1е определяется метод Совраге То ( ), который задает способ структурного сравнения двух объектов для целей сортировки.