Главная страница

программирование. Руководство su P# a n Reference в herbert schildt полное руководство с 0 герберт шилдт


Скачать 3.32 Mb.
НазваниеРуководство su P# a n Reference в herbert schildt полное руководство с 0 герберт шилдт
Анкорпрограммирование
Дата25.01.2022
Размер3.32 Mb.
Формат файлаrtf
Имя файлаc-40-polnoe-rukovodstvo-2011.rtf
ТипРуководство
#341448
страница86 из 97
1   ...   82   83   84   85   86   87   88   89   ...   97

void Add(T item)

void Clear()

bool Contains(T item)

void CopyTo(T[] array, int arraylndex)

void Remove(T item)
Добавляет элемент item в вызывающую коллекцию. Генерирует исключение NotSupportedException, если коллекция доступна только для чтения Удаляет все элементы из вызывающей коллекции Возвращает логическое значение true, если вызывающая коллекция содержит элемент item , а иначе – логическое значение false

Копирует содержимое вызывающей коллекции в массив array , начиная с элемента, указываемого по индексу

arraylndex

Удаляет первое вхождение элемента item в вызывающей коллекции. Возвращает логическое значение true, если элемент i tem удален. А если этот элемент не найден в вызывающей коллекции, то возвращается логическое значение false
Некоторые из перечисленных выше методов генерируют исключение NotSupportedException, если коллекция доступна только для чтения.

А поскольку интерфейс ICollection наследует от интерфейсов IEnumerable и IEnumerable, то он включает в себя также обобщенную и необобщенную формы метода GetEnumerator ().

Благодаря тому что в интерфейсе ICollection реализуется интерфейс IEnumerable, в нем поддерживаются также методы расширения, определенные в классе Enumerable. Несмотря на то что методы расширения предназначены главным образом для поддержки LINQ, им можно найти и другое применение, в том числе и в коллекциях.

Интерфейс IList

В интерфейсе IList определяется такое поведение обобщенной коллекции, которое позволяет осуществлять доступ к ее элементам по индексу с отсчетом от нуля. Этот интерфейс наследует от интерфейсов IEnumerable, IEnumerable и ICollection и поэтому является обобщенным вариантом необобщенного интерфейса IList. Методы, определенные в интерфейсе IList, перечислены в табл. 25.11. В двух из этих методов предусматривается модификация коллекции. Если же коллекция доступна только для чтения или имеет фиксированный размер, то методы Insert ( ) и RemoveAt () генерируют исключение NotSupportedException.

Таблица 25.11. Методы, определенные в интерфейсе IList
Метод
Описание
int IndexOf(Т item)

void Insert(int index,

T item)

void RemoveAt(int index)
Возвращает индекс первого вхождения элемента item в вызывающей коллекции. Если элемент item не обнаружен, то метод возвращает значение ‑1 Вставляет в вызывающую коллекцию элемент item по индексу index

Удаляет из вызывающей коллекции элемент, расположенный по указанному индексу index
Кроме того, в интерфейсе IList определяется индексатор

Т this[int index] { get; set; }

который устанавливает или возвращает значение элемента коллекции по указанному индексу index.

Интерфейс IDictionary

В интерфейсе IDictionary определяется такое поведение обобщенной коллекции, которое позволяет преобразовать уникальные ключи в соответствующие значения. Это означает, что в данном интерфейсе определяется коллекция, в которой хранятся пары "ключ‑значение". Интерфейс IDictionary наследует от интерфейсов IEnumerable, IEnumerable> и ICollection> и поэтому является обобщенным вариантом необобщенного интерфейса IDictionary. Методы, объявленные в интерфейсе IDictionary, приведены в табл. 25.12. Все эти методы генерируют исключение ArgumentNullException при попытке указать пустой ключ.

Таблица 25.12. Методы, определенные в интерфейсе IDictionaryCTKey, TValue>
Метод
Описание
void Add(TKey key , TValue value\

bool Contains(TKey key)

bool Remove(TKey key)

bool TryGetValue(TKey key , out TValue value)
Добавляет в вызывающую коллекцию пару “ключ‑значение”, определяемую параметрами key и value. Генерирует исключение ArgumentException, если ключ key уже находится в коллекции Возвращает логическое значение true, если вызывающая коллекция содержит элемент key в качестве ключа, а иначе – логическое значение false Удаляет из коллекции элемент, ключ которого равен значению key

Предпринимает попытку извлечь значение из коллекции по указанному ключу key и присвоить это значение переменной value. При удачном исходе операции возвращается логическое значение true, а иначе – логическое значение false. Если ключ key не найден, переменной value присваивается значение, выбираемое по умолчанию
Кроме того, в интерфейсе IDictionary определены перечисленные ниже свойства.
Свойство
Описание
ICollection Keys { get; } Подучает коллекцию ключей ICollection Values { get; } Получает коллекцию значений
Следует иметь в виду, что ключи и значения, содержащиеся в коллекции, доступны отдельными списками с помощью свойств Keys и Values.

И наконец, в интерфейсе IDictionary определяется следующий индексатор.

TValue this[TKey key ]    {    get;    set;    }

Этот индексатор служит для получения и установки значения элемента коллекции, а также для добавления в коллекцию нового элемента. Следует, однако, иметь в виду, что в качестве индекса в данном случае служит ключ элемента, а не сам индекс.

Интерфейсы IEnumerable и IEnumerator

Интерфейсы IEnumerable и IEnumerator являются обобщенными эквивалентами рассмотренных ранее необобщенных интерфейсов IEnumerable и IEnumerator. В них объявляются аналогичные методы и свойства, да и действуют они по тому же принципу. Разумеется, обобщенные интерфейсы оперируют данными только того типа, который указывается в аргументе типа.

В интерфейсе IEnumerable метод GetEnumerator () объявляется следующим образом.

IEnumerator GetEnumerator()

Этот метод возвращает перечислитель типа Т для коллекции. А это означает, что он возвращает типизированный перечислитель.

Кроме того, в интерфейсе IEnumerable определяются два таких же метода, как и в необобщенном его варианте: MoveNext ( ) и Reset () . В этом интерфейсе объявляется также обобщенный вариант свойства Current.

Т Current { get; }

Это свойство возвращает ссылку типа Т на следующий объект. А это означает, что обобщенный вариант свойства Current является типизированным.

Но между интерфейсами IEnumerator и IEnumerator имеется одно важное различие: интерфейс IEnumerator наследует от интерфейса IDisposable, тогда как интерфейс IEnumerator не наследует от него. В интерфейсе IDisposable определяется метод Dispose () , который служит для освобождения неуправляемых ресурсов.

ПРИМЕЧАНИЕ

В интерфейсе lEnumerable реализуется также необобщенный интерфейс IEnumerable. Это означает, что в нем поддерживается необобщенный вариант метода GetEnumerator (). Кроме того, в интерфейсе lEnumerable реализуется необобщенный интерфейс IEnumerator, а следовательно, в нем поддерживаются необобщенные варианты свойства Current.

Интерфейс IComparer

Интерфейс IComparer<Т> является обобщенным вариантом рассмотренного ранее интерфейса IComparer. Главное отличие между ними заключается в том, что интерфейс IComparer обеспечивает типовую безопасность. В нем обобщенный вариант метода Compare () объявляется следующим образом.

int Compare(Т х, Т у)

В этом методе сравниваются объекты х и у. Он возвращает положительное значение, если значение объекта х больше, чем у объекта у; отрицательное – если значение объекта х меньше, чем у объекта у; и нулевое значение – если сравниваемые значения равны.

Интерфейс IEqualityComparer

Интерфейс IEqualityComparer полностью соответствует своему необобщенному аналогу EqualityComparer. В нем определяются два следующих метода.

bool Equals(Т х, Т у) int GetHashCode(Т obj)

Метод Equals () должен возвратить логическое значение true, если значения объектов х и у равны. А метод GetHashCode () возвращает хеш‑код для объекта obj. Если два сравниваемых объекта равны, то их хеш‑коды также должны быть одинаковы.

Интерфейс ISet

Интерфейс ISet был добавлен в версию 4.0 среды .NET Framework. Он определяет поведение обобщенной коллекции, реализующей ряд уникальных элементов. Этот интерфейс наследует от интерфейсов IEnumerable, IEnumerable, а также ICollection. В интерфейсе ISet определен ряд методов, перечисленных в табл. 25.13. Обратите внимание на то, что параметры этих методов указываются как относящиеся к типу IEnumerable. Это означает, что в качестве второго аргумента методу можно передать нечто, отличающееся от объектов типа ISet. Но чаще всего оба аргумента оказываются экземплярами объектов типа ISet.

Таблица 25.13. Методы, определенные в интерфейсе ISet
Метод
Описание
void ExceptWith(Ienumerable
Удаляет из вызывающего множества те элементы,
other)
которые содержатся в другом множестве other
void
После вызова этого метода вызывающее множе
IntersectWith(IEnumerable
ство содержит пересечение своих элементов с эле
other)
ментами другого множества other
bool
Возвращает логическое значение true, если вы
IsProperSubsetOf(IEnumerable
зывающее множество является правильным под
other)
множеством другого множества other , а иначе – логическое значение false
bool IsProperSupersetOf(lEnumera
возвращает логическое значение true, если вы
ble other)
зывающее множество является правильным надмножеством другого множества other, а иначе – логическое значение false
bool IsSubsetOf(IEnumerable
Возвращает логическое значение true, если вы
other)
зывающее множество является подмножеством другого множества other , а иначе – логическое значение false
bool
Возвращает логическое значение true, если вы
IsSupersetOf(IEnumerable
зывающее множество является надмножеством
other)
другого множества other, а иначе – логическое значение false
bool Overlaps(IEnumerable
Возвращает логическое значение true, если вы
other)
зывающее множество и другое множество other содержат хотя бы один общий элемент, а иначе – логическое значение false
bool SetEquals(IEnumerable
Возвращает логическое значение true, если все
other)
элементы вызывающего множества и другого множества other оказываются общими, а иначе –логическое значение false. Порядок расположения элементов не имеет значения, а дублирующиеся элементы во другом множестве other игнорируются
void SymmetricExceptWith
После вызова этого метода вызывающее множе
(IEnumerable other)
ство будет содержать симметрическую разность своих элементов и элементов другого множества

other
void UnionWith(IEnumerable
После вызова этого метода вызывающее множе
other)
ство будет содержать объединение своих элементов и элементов другого множества other
Структура KeyValuePair

В пространстве имен System.Collections. Generic определена структура KeyValuePair. Она служит для хранения ключа и его значения и применяется в классах обобщенных коллекций, в которых хранятся пары "ключ‑значение", как, например, в классе Dictionary В этой структуре определяются два следующих свойства.

public TKey Key { get; }; public TValue Value { get; };

В этих свойствах хранятся ключ и значение соответствующего элемента коллекции. Для построения объекта типа KeyValuePair служит конструктор:

public KeyValuePair(TKey key, TValue value) где key обозначает ключ, a value – значение.

Классы обобщенных коллекций

Как упоминалось ранее, классы обобщенных коллекций по большей части соответствуют своим необобщенным аналогам, хотя в некоторых случаях они носят другие имена. Отличаются они также своей организацией и функциональными возможностями. Классы обобщенных коллекций определяются в пространстве имен System. Collections . Generic. В табл. 25.14 приведены классы, рассматриваемые в этой главе. Эти классы составляют основу обобщенных коллекций.

Таблица 25.14. Основные классы обобщенных коллекций
Класс
Описание
Dictionary
TValue>
Сохраняет пары “ключ‑значение". Обеспечивает такие же функциональные возможности, как и необобщенный класс Hashtable
HashSet
Сохраняет ряд уникальных значений, используя хеш‑таблицу
LinkedList
Сохраняет элементы в двунаправленном списке
List
Создает динамический массив. Обеспечивает такие же функциональные возможности, как и необобщенный класс ArrayList
Queue
Создает очередь. Обеспечивает такие же функциональные возможности, как и необобщенный класс Queue
SortedDictionary
Создает отсортированный список из пар “ключ‑
TValue>
значение"
SortedList
TValue>
Создает отсортированный список из пар “ключ‑значение”. Обеспечивает такие же функциональные возможности, как и необобщенный класс SortedList
SortedSet
Создает отсортированное множество
Stack
Создает стек. Обеспечивает такие же функциональные возможности, как и необобщенный класс Stack
ПРИМЕЧАНИЕ

В пространстве имен System. Collections. Generic находятся также следующие классы: класс SynchronizedCollection синхронизированной коллекции на основе класса IList; класс SynchronizedReadOnlyCollection, доступной только для чтения синхронизированной коллекции на основе класса lList; абстрактный класс SynchronizedKeyCollectioncK, т>, служащий в качестве базового для класса коллекции System. ServiceModel. UriSchemeKeyedCollection; а также класс KeyedByTypeCollection коллекции, в которой в качестве ключей используются отдельные типы данных.

Класс List

В классе List реализуется обобщенный динамический массив. Он ничем принципиально не отличается от класса необобщенной коллекции ArrayList. В этом классе реализуются интерфейсы ICollection, ICollection, IList, IList, IEnumerable и IEnumerable. У класса List имеются следующие конструкторы.

public List()

public List(IEnumerable collection) public List(int capacity)

Первый конструктор создает пустую коллекцию класса List с выбираемой по умолчанию первоначальной емкостью. Второй конструктор создает коллекцию типа List с количеством инициализируемых элементов, которое определяется параметром collection и равно первоначальной емкости массива. Третий конструктор создает коллекцию типа List, имеющую первоначальную емкость, задаваемую параметром capacity . В данном случае емкость обозначает размер базового массива, используемого для хранения элементов коллекции. Емкость коллекции, создаваемой в виде динамического массива, может увеличиваться автоматически по мере добавления в нее элементов.

В классе List определяется ряд собственных методов, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Некоторые из наиболее часто используемых методов этого класса перечислены в табл. 25.15.

Таблица 25.15. Наиболее часто используемые методы, определенные в классе List
Метод
Описание
public virtual void AddRange(Icollection ‑ collection) public virtual int BinarySearch(T item)
Добавляет элементы из коллекции collection в конец вызывающей коллекции типа ArrayList

Выполняет поиск в вызывающей коллекции значения, задаваемого параметром item. Возвращает индекс совпавшего элемента. Если искомое значение не найдено, возвращается отрицательное значение. Вызывающий список должен быть отсортирован
Метод
Описание
1   ...   82   83   84   85   86   87   88   89   ...   97


написать администратору сайта