Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π—Π«Πš ΠŸΠ ΠžΠ“Π ΠΠœΠœΠ˜Π ΠžΠ’ΠΠΠ˜Π― Π‘# 2005 И ΠŸΠ›ΠΠ’Π€ΠžΠ ΠœΠ .NET 2.0. 3-Π΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 69

Автор Π­Π½Π΄Ρ€ΡŽ ВроСлсСн

// Π­Ρ‚ΠΎΡ‚ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ класс ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для сортировки

// массива ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Car ΠΏΠΎ названию.

using System.Collections;

public class PetNameComparer : IComparer {

 public PetNameComparer() {}

 // ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π°Π·Π²Π°Π½ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

 int IComΡ€Π°rer.Compare(object o1, object o2) {

  Car t1 = (Car)ΠΎ1;

  Car t2 = (Car)o2;

  return String.Compare (t1.petName, t2.petName);

 }

}

Π­Ρ‚ΠΎΡ‚ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ класс ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Класс System.Array ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Sort(), ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ допускаСт использованиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ интСрфСйс IComparer (рис. 7.11).

static void Main (string[] args) {

 β€¦

 // Π’Π΅ΠΏΠ΅Ρ€ΡŒ сортируСм ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ.

 Array.Sort(myAutos, new Π Π΅tNameComparer());

 // Π’Ρ‹Π²ΠΎΠ΄ отсортированного массива.

 ConsolΠ΅.WriteLine("\nУпорядочСниС ΠΏΠΎ названию");

 foreach(Car e in myAutos) Console.WriteLine("{0} {1}", c.ID, c.petName);

 β€¦

}

Рис. 7.11. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΉ ΠΏΠΎ названию

Π’ΠΈΠΏΡ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠ΅ сортировку, ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ свойства

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… статичСских свойств Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ Car ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ элСмСнту Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² класс Car Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ статичСскоС свойство SortByPetName(), доступноС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅Π΅ экзСмпляр ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ интСрфСйс IComparer (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС это PetNameComparer).

// Π—Π΄Π΅ΡΡŒ обСспСчиваСтся ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ свойства для

// возвращСния "ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ" интСрфСйса IComparer.

public class Car: IComparable {

 β€¦

 // Бвойство, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€ SortByPetName.

 public static IComparer SortByPetName { get { return (IComparer)new PetNameComparer(); } }

}

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ сортировку ΠΏΠΎ названию, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ассоциированноС свойство Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠ³ΠΎ Π±Ρ‹ Ρ‚ΠΎ Π½ΠΈ Π±Ρ‹Π»ΠΎ "упоминания" ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° класса PetNameComparer:

// Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ становится Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅.

Array.Sort(myAutos, Car.SortByPetName);

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ ComparableCar Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ Π² ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ Π³Π»Π°Π²Π΅ 7.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΈΠΏΡ‹ интСрфСйса, Π½ΠΎ ΠΈ Ρ‚ΠΎ, Π² Ρ‡Π΅ΠΌ ΠΈΡ… польза. Π‘ΡƒΠ΄ΡŒΡ‚Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, интСрфСйсы ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ Π² любом ΠΈΠ· Π³Π»Π°Π²Π½Ρ‹Ρ… пространств ΠΈΠΌΠ΅Π½ .NET ΠΈ Π² Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ этой Π³Π»Π°Π²Ρ‹ ΠΌΡ‹ рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ интСрфСйсов (ΠΈ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов) ΠΈΠ· пространства ΠΈΠΌΠ΅Π½ System.Collections.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ ΠΈΠ· пространства ΠΈΠΌΠ΅Π½ System.Collections

Π’ качСствС самого ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Ρ‚ΠΈΠΏ System.Array. Π’ Π³Π»Π°Π²Π΅ 3 Π±Ρ‹Π»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ класс System.Array ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Ρ†Π΅Π»Ρ‹ΠΉ ряд ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… возмоТностСй (Ρ‚Π°ΠΊΠΈΡ…, ΠΊΠ°ΠΊ ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, сортировка, очистка ΠΈ пСрСчислСниС). Но класс Array ΠΈΠΌΠ΅Π΅Ρ‚ свои ограничСния, ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹ΠΌ ΠΈΠ· Π½ΠΈΡ… являСтся Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ динамичСского пСрСопрСдСлСния Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ элСмСнтов. Если для хранСния Ρ‚ΠΈΠΏΠΎΠ² Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π±ΠΎΠ»Π΅Π΅ "Π³ΠΈΠ±ΠΊΠΈΠΉ" ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² пространствС ΠΈΠΌΠ΅Π½ System.Collections (ΠΈΠ»ΠΈ, Π² соотвСтствии с рСкомСндациями Π³Π»Π°Π²Ρ‹ 10, ΠΈΠ· пространства ΠΈΠΌΠ΅Π½ System.Collections.Generic).

ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²ΠΎ ΠΈΠΌΠ΅Π½ System.Collections опрСдСляСт Ρ†Π΅Π»Ρ‹ΠΉ ряд интСрфСйсов (ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… ΡƒΠΆΠ΅ использовались Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… этой Π³Π»Π°Π²Ρ‹). Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ классов Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ эти интСрфСйсы для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ доступ ΠΊ своСму содСрТимому. Π’ Ρ‚Π°Π±Π». 7.2. приводятся описания основных интСрфСйсов, относящихся ΠΊ коллСкциям.

Π’Π°Π±Π»ΠΈΡ†Π° 7.2. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ System.Collections

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ОписаниС ICollection ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΎΠ±Ρ‰ΠΈΠ΅ характСристики (Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΡΡ‚ΡŒ счСтчиков ΠΈ Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ) для Ρ‚ΠΈΠΏΠ° ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ IComparer ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ сравнСниС Π΄Π²ΡƒΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² IDictionary ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ содСрТимоС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€ ΠΈΠΌΠ΅Π½ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ IDictionaryEditor ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΠ΅Ρ‚ содСрТимоС Ρ‚ΠΈΠΏΠ°, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ IDictionary IEnumerable Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ интСрфСйс IEnumerator для Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° IEnumerator ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ±Ρ‰ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ пСрСчислСния ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ foreach IHashCodeProvider Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ…Π΅Ρˆ-ΠΊΠΎΠ΄ для Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ настраиваСмый ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ IKeyComparer Π­Ρ‚ΠΎΡ‚ интСрфСйс являСтся Π½ΠΎΠ²Ρ‹ΠΌ Π² .NET 2.0). ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ возмоТности IComparer ΠΈ IHashCodeProvider, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ сравнСниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎ ΠΈΡ… Ρ…Π΅Ρˆ-ΠΊΠΎΠ΄Π°ΠΌ (Ссли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (Ρ€Π°Π²Π½Ρ‹, Ρ‚ΠΎ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ Ρ…Π΅Ρˆ-ΠΊΠΎΠ΄Ρ‹) IList ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ добавлСния, удалСния ΠΈ индСксирования элСмСнтов Π² спискС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‡Π»Π΅Π½ΠΎΠ² этого интСрфСйса ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ Π΄Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ доступным Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния, ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Π»ΠΈ ΠΎΠ½ фиксированный Ρ€Π°Π·ΠΌΠ΅Ρ€

МногиС ΠΈΠ· этих интСрфСйсов связаны ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠ΅ΠΉ интСрфСйсов, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹ΠΌΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ†Π°ΠΌΠΈ. На рис. 7.12 ΠΏΠΎΠΊΠ°Π·Π°Π½Π° схСма взаимосвязСй ΠΌΠ΅ΠΆΠ΄Ρƒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ (Π½Π°ΠΏΠΎΠΌΠ½ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ интСрфСйс ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ ΠΎΡ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… интСрфСйсов).

Рис. 7.12. Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΡ интСрфСйсов System.Collections

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ICollection

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ICollection являСтся ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΌ интСрфСйсом пространства ΠΈΠΌΠ΅Π½ System.Collections Π² Ρ‚ΠΎΠΌ смыслС, Ρ‡Ρ‚ΠΎ этот интСрфСйс опрСдСляСт ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ Π»ΡŽΠ±Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. По сути, этот интСрфСйс обСспСчиваСт ΡƒΠ·ΠΊΠΈΠΉ Π½Π°Π±ΠΎΡ€ свойств, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ: Π°) число элСмСнтов Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅; Π±) Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΡΡ‚ΡŒ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°; Π²) Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ копирования содСрТимого Π² Ρ‚ΠΈΠΏ System.Array. Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ ICollection опрСдСляСтся Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅ (ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ICollection Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ IEnumerable).

public interface ICollection : IEnumerable {

 // Π§Π»Π΅Π½ IEnumerable.…

 int Count { get; }

 bool IsSynchronized { get; }

 object SyncRoot { get; }

 void CopyTo(Array array, int index);

}

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ IDictionary

Π’Ρ‹, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ - это коллСкция, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΏΠ°Ρ€ ΠΈΠΌΠ΅Π½ ΠΈ ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ‚ΠΈΠΏ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ IDictionary, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ смоТСтС ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ Car (значСния) с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈΡ… ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ восстановлСния ΠΏΠΎ ID ΠΈΠ»ΠΈ petName (это ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΠΌΠ΅Π½). Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ IDictionary опрСдСляСт свойства Keys ΠΈ Values, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Add(), Remove() ΠΈ Contains(). ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ элСмСнты ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ c ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ индСксатора Ρ‚ΠΈΠΏΠ°. Π’ΠΎΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅.

public interface IDictionary : ICollection, IEnumerable {

 bool IsFixedSize { get; }

 bool IsReadOnly { get; }

 object this [object key] { get; set; }

 ICollection Keys { get; }

 ICollection Values { get; }

 void Add(object key, object value);

 void Clear();

 bool Contains(Object key);

 IDictionaryEnumerator GetEnumerator();

 void Remove(object key);

}

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ IDictionaryEnumerator

ΠŸΡ€ΠΈ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ IDictionary.GetEnumerator() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ экзСмпляр IDictionaryEnumerator. Π’ΠΈΠΏ IDictionaryEnumerator – это строго Ρ‚ΠΈΠΏΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π½ΡƒΠΌΠ΅Ρ€Π°Ρ‚ΠΎΡ€, Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‰ΠΈΠΉ IEnumerator ΠΏΡƒΡ‚Π΅ΠΌ добавлСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ возмоТности.

public interface IDictionaryEnumerator : IEnumerator {

 // ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ IEnumerator…

 DictionaryEntry Entry { get; }

 object Key { get; }

 object Value { get; }

}

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ IDictionaryEnumerator обСспСчиваСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ пСрСчислСния элСмСнтов словаря с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±Ρ‰Π΅Π³ΠΎ свойства Entry, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ класса System.Collections.DictionaryEntry. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ» ΠΏΠΎ ΠΏΠ°Ρ€Π°ΠΌ ΠΈΠΌΠ΅Π½ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ свойства Key/Value.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ IList

ПослСдним ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… интСрфСйсов System.Collections являСтся интСрфСйс IList, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обСспСчиваСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ вставки, удалСния ΠΈ индСксирования элСмСнтов ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

public interface IList : ICollection, IEnumerable {

 bool IsFixedSize { get; }

 bool IsReadOnly { get; }

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

 int Add(object value);

 void Clear();

 bool Contains(object value);