- •939 Сторінка в djvu 54 сторінка
- •Int Count { get; } bool IsReadOnly { get; }
- •Int Compare(т х, т у)
- •Int CompareTo(object obj)
- •Int CompareTo(т other)
- •Int Compare(object X, object y)
- •Int Compare(т х, т у)
- •Inv.Add(new Inventory("Викрутки", 8.29, 2)); inv.Add(new Inventory("Молотки", 3.50, 4)); inv.Add(new Inventory("Дриля", 19.88, 8));
- •Void Reset()
Int Count { get; } bool IsReadOnly { get; }
Властивість Count містить ряд елементів, що зберігаються в цей момент у колекції. А властивість IsReadOnly має логічне значення true, якщо колекція доступна тільки для читання. Якщо ж колекція доступна як для читання, так і для запису, то дана властивість має логічне значення false.
Крім того, в інтерфейсі ICollection<T> визначені перераховані нижче методи. Зверніть увагу на те, що в цьому узагальненому інтерфейсі визначена трохи більша кількість методів, чим у його неузагальненому аналогу.
Метод |
Опис |
void Add(T item)
|
Додає елемент item у колекцію. Генерує виключення NotSupportedException, якщо колекція доступна тільки для читання |
void Clear()
|
Видаляє всі елементи із колекції |
bool Contains(T item)
|
Повертає логічне значення true, якщо колекція містить елемент item, а інакше - логічне значення false |
void CopyTo(T[] array, int arraylndex)
|
Копіює вміст зухвалої колекції в масив array, починаючи з елемента, що вказує по індексі arraylndex |
void Remove(T item)
|
Видаляє перше входження елемента item у колекції. Повертає логічне значення true, якщо елемент item вилучений. А якщо цей елемент не знайдений у колекції, то повертається логічне значення false |
Деякі з перерахованих вище методів генерують виключення NotSupportedException, якщо колекція доступна тільки для читання.
А оскільки інтерфейс ICollection<T> успадковує від інтерфейсів IEnumerable і IEnumerable<T>, де він містить у собі також узагальнену й неузагальнену форми методу GetEnumerator().
Завдяки тому що в інтерфейсі ICollection<T> реалізується інтерфейс IEnumerable<T>, у ньому підтримуються також методи розширення, певні в класі Enumerable. Незважаючи на те що методи розширення призначені головним чином для підтримки LINQ, їм можна знайти й інше застосування, у тому числі й у колекціях.
Інтерфейс IList<T>
В інтерфейсі IList<T> визначається таке поводження узагальненої колекції, що дозволяє здійснювати доступ до її елементів по індексі з відліком від нуля. Цей інтерфейс успадковує від інтерфейсів IEnumerable, IEnumerable<T> і ICollection<T> і тому є узагальненим варіантом неузагальненого інтерфейсу IList. Методи, певні в інтерфейсі IList<T>, перераховані в табл. 25.11. У двох із цих методів передбачається модифікація колекції. Якщо ж колекція доступна тільки для читання або має фіксований розмір, то методи Insert () і RemoveAt () генерують виключення NotSupportedException.
Таблиця 25.11. Методи, певні в інтерфейсі IList<T>
Метод |
Опис |
int IndexOf(Т item)
|
Повертає індекс першого входження елемента item у колекції. Якщо елемент item не виявлений, то метод повертає значення -1 |
void Insert (int index, T item) |
Вставляє в колекцію елемент item по індексі index |
void RemoveAt(int index) |
Видаляє із колекції елемент, розташований по зазначеному індексі index |
Крім того, в інтерфейсі IList<T> визначається індексатор
Т this[int index] { get; set; }
який установлює або повертає значення елемента колекції по зазначеному індексі index.
Інтерфейс IDictionary<TKey, TValue>
В інтерфейсі IDictionary<TKey, TValue> визначається таке поводження узагальненої колекції, що дозволяє перетворити унікальні ключі у відповідні значення. Це означає, що в даному інтерфейсі визначається колекція, у якій зберігаються пари "джерело-значення". Інтерфейс IDictionary<TKey, TValue> успадковує від інтерфейсів IEnumerable,IEnumerable<KeyValuePair<TKey,TValue>>иICollection<KeyValuePair<TKey, TValue> і тому є узагальненим варіантом неузагальненого інтерфейсу IDictionary. Методи, оголошені в інтерфейсі IDictionary<TKey, TValue>, наведені в табл. 25.12. Всі ці методи генерують виключення ArgumentNullException при спробі вказати порожній ключ.
Таблиця 25.12. Методи, певні в інтерфейсі IDictionary<TKey, TValue>
Метод |
Опис |
void Add(TKey key, TValue value)
|
Додає в зухвалу колекцію пари "ключ- значення", обумовлену параметрами key й value. Генерує виключення ArgumentException, якщо ключ key уже перебуває в колекції |
bool Contains(TKey key) |
Повертає логічне значення true, якщо зухвала колекція містить елемент key як ключ, а інакше - логічне значення false |
bool Remove(TKey key)
|
Видаляє з колекції елемент, ключ якого дорівнює значенню key |
bool TryGetValue(TKey key, out TValue value)
|
Уживає спробу витягти значення з колекції по зазначеному ключі key і привласнити це значення змінної value. При вдалому результаті операції повертається логічне значення true, а інакше — логічне значення false. Якщо ключ key не знайдений, змінної value привласнюється значення, обиране за замовчуванням |
Крім того, в інтерфейсі IDictionary<TKey, TValue> визначені перераховані нижче властивості.
Властивість |
Опис |
ICollection Keys<TKey> { get; } |
Одержує колекцію ключів |
ICollection Values<TValue> { get; } |
Одержує колекцію значень |
Варто мати на увазі, що ключі й значення, що втримуються в колекції, доступні окремими списками за допомогою властивостей Keys і Values.
І нарешті, в інтерфейсі IDictionary <TKey, TValue> визначається наступний індексатор.
TValue this[TKey key] { get; set; }
Цей індексатор служить для одержання й установки значення елемента колекції, а також для додавання в колекцію нового елемента. Треба, однак, мати на увазі, що як індекс у цьому випадку служить ключ елемента, а не сам індекс.
Інтерфейси IEnumerable<T> і IEnumerator<T>
Інтерфейси IEnumerable<T> і IEnumerator<T> є узагальненими еквівалентами розглянутих раніше неузагальнених інтерфейсів IEnumerable і IEnumerator. У них оголошуються аналогічні методи й властивості, та й діють вони по тім же принципі. Зрозуміло, узагальнені інтерфейси оперують даними тільки того типу, що вказується в аргументі типу.
В інтерфейсі IEnumerable<T> метод GetEnumerator ( ) оголошується в такий спосіб.
IEnumerator<T> GetEnumerator()
Цей метод повертає перечисельник типу Т для колекції. А це означає, що він повертає типізований перечисельник.
Крім того, в інтерфейсі IEnumerable<T> визначаються два таких же методи, як й у неузагальненому його варіанті: MoveNext () і Reset (). У цьому інтерфейсі оголошується також узагальнений варіант властивості Current.
Т Current { get; }
Ця властивість повертає посилання типу Т на наступний об'єкт. А це означає, що узагальнений варіант властивості Current є типізованим.
Але між інтерфейсами IEnumerator і IEnumerator<T> є одне важливе розходження: інтерфейс IEnumerator<T> успадковує від інтерфейсу IDisposable, тоді як інтерфейс IEnumerator не успадковує від нього. В інтерфейсі IDisposable визначається метод Dispose (), що служить для звільнення некерованих ресурсів.
ПРИМІТКА
В інтерфейсі IEnumerable<T> реалізується також неузагальнений інтерфейс IEnumerable. Це означає, що в ньому підтримується неузагальнений варіант методу GetEnumerator (). Крім того, в інтерфейсі IEnumerable<T> реалізується неузагальнений інтерфейс IEnumerator, а отже, у ньому підтримуються неузагальнені варіанти властивості Current.
Інтерфейс IComparer<T>
Інтерфейс IComparer<T> є узагальненим варіантом розглянутого раніше інтерфейсу IComparer. Головна відмінність між ними полягає в тім, що інтерфейс IComparer<T> забезпечує типову безпеку. У ньому узагальнений варіант методу Compare ( ) оголошується в такий спосіб.
