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

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

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

 Console.WriteLine("Π£Π΄Π°Π»Π΅Π½ {0}", stringStack.Pop());

 Console.WriteLine("ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт: {0}", stringStack.Peek());

 Console.WriteLine("Π£Π΄Π°Π»Π΅Π½ {0}", stringStack.Pop());

 try {

  Console.WriteLine("ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт: {0}", stringStack.Peek());

  Console.WriteLine ("Π£Π΄Π°Π»Π΅Π½ {0}", stringStack.Pop());

 } catch(Exception e) {Console.WriteLine("Ошибка: {0}", e.Message);}

}

Π—Π΄Π΅ΡΡŒ строится стСк, содСрТащий Ρ‚Ρ€ΠΈ строковых Ρ‚ΠΈΠΏΠ° (Π½Π°Π·Π²Π°Π½Π½Ρ‹Ρ… Π² соотвСтствии с порядком ΠΈΡ… вставки). "Заглядывая" Π² стСк, Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ элСмСнт, находящийся Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ стСка, поэтому ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Peek() выявляСт Ρ‚Ρ€Π΅Ρ‚ΡŒΡŽ строку. ПослС сСрии Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Pop() ΠΈ Peek() стСк, Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счСтС, ΠΎΠΏΡƒΡΡ‚ΠΎΡˆΠ°Π΅Ρ‚ΡΡ, ΠΈ Ρ‚ΠΎΠ³Π΄Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Peek()/Pop() ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ систСмного ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

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

ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²ΠΎ ΠΈΠΌΠ΅Π½ System.Collections.Specialized

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΈΠΏΠΎΠ², ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² пространствС ΠΈΠΌΠ΅Π½ System.Collections, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов .NET ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ Π½Π°Π±ΠΎΡ€ Π±ΠΎΠ»Π΅Π΅ спСциализированных Ρ‚ΠΈΠΏΠΎΠ², ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² пространствС ΠΈΠΌΠ΅Π½ System.Collections.Specialized. НапримСр, Ρ‚ΠΈΠΏΡ‹ StringDictionary ΠΈ ListDictionary ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ "ΡΡ‚ΠΈΠ»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡƒΡŽ" Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ интСрфСйса IDictionary. Описания основных Ρ‚ΠΈΠΏΠΎΠ² класса ΠΈΠ· этого пространства ΠΈΠΌΠ΅Π½ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ΡΡ Π² Ρ‚Π°Π±Π». 7.5.

Π’Π°Π±Π»ΠΈΡ†Π° 7.5. Π’ΠΈΠΏΡ‹ пространства ΠΈΠΌΠ΅Π½ System.Collections.Specialized.

Π’ΠΈΠΏ ОписаниС CollectionsUtil Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ рСгистр символов Π² строках HybridDictionary Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ IDictionary, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ListDictionary, ΠΏΠΎΠΊΠ° коллСкция ΠΌΠ°Π»Π°, ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°ΡΡΡŒ Π½Π° Hashtable, ΠΊΠΎΠ³Π΄Π° коллСкция становится большой ListDictionary Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ IDictionary, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ список. РСкомСндуСтся для ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат Π½Π΅ Π±ΠΎΠ»Π΅Π΅ дСсятка элСмСнтов NameValueCollection ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ связанных ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠ° String, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ доступны ΠΈΠ»ΠΈ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ, ΠΈΠ»ΠΈ ΠΏΠΎ индСксу StringCollection ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ строк StringDictionary Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Hashtable с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ, строго Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ, ΠΊΠ°ΠΊ строка, Π° Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ StringEnumerator ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ простой Ρ†ΠΈΠΊΠ» ΠΏΠΎ элСмСнтам StringCollection 

РСзюмС

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ абстрактных Ρ‡Π»Π΅Π½ΠΎΠ². Π’Π²ΠΈΠ΄Ρƒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ интСрфСйс Π½Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ, ΠΎΠ½ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ рассматриваСтся, ΠΊΠ°ΠΊ, Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ повСдСния, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ для Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. ΠŸΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ интСрфСйса Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… классах Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ (это называСтся интСрфСйсным ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠΎΠΌ).

Для опрСдСлСния Π½ΠΎΠ²Ρ‹Ρ… интСрфСйсов Π² C# прСдлагаСтся ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово interface. Π›ΡŽΠ±ΠΎΠΉ Ρ‚ΠΈΠΏ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ интСрфСйсов, сколько Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈΡ… Π² спискС опрСдСлСния Ρ‚ΠΈΠΏΠ°, раздСляя запятыми. ΠŸΡ€ΠΈ этом ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ интСрфСйсы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π±Π°Π·ΠΎΠ²Ρ‹Ρ… интСрфСйсов.

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

ГЛАВА 8. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°, Π΄Π΅Π»Π΅Π³Π°Ρ‚Ρ‹ ΠΈ события

Π”ΠΎ этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π² нашСй ΠΊΠ½ΠΈΠ³Π΅ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Main() Ρ‚Π΅ΠΌ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹ΠΌ способом направлял запросы ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ. Но ΠΌΡ‹ ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ Π½Π΅ рассматривали Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ обращСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΊ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ сторонС. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² систСмы оказываСтся двухсторонняя коммуникация, которая рСализуСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ интСрфСйсов ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°, событий ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… конструкций. Π­Ρ‚Π° Π³Π»Π°Π²Π° начинаСтся с рассмотрСния Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚ΠΈΠΏΠΎΠ² интСрфСйса Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ возмоТности ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°.

Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ ΠΎ Ρ‚ΠΈΠΏΠ΅ Π΄Π΅Π»Π΅Π³Π°Ρ‚Π° .NET, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌ Ρ‚ΠΈΠΏΠΎΠ²ΡƒΡŽ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΈ "ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ" Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Ρ‹ ΠΏΠΎΠ·Π΄Π½Π΅Π΅. Но, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ указатСля Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² C++, Π΄Π΅Π»Π΅Π³Π°Ρ‚Ρ‹ .NET ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ многоадрСсного ΠΈ асинхронного Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². ΠœΡ‹ рассмотрим асинхронноС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π΅Π»Π΅Π³Π°Ρ‚Π° ΠΏΠΎΠ·ΠΆΠ΅, ΠΏΡ€ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ пространства ΠΈΠΌΠ΅Π½ System.Threading (см. Π³Π»Π°Π²Ρƒ 14).

Выяснив, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ Π΄Π΅Π»Π΅Π³Π°Ρ‚Π° ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½ΠΈΠΌΠΈ, ΠΌΡ‹ с Π²Π°ΠΌΠΈ рассмотрим ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово C# event, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€ΠΈΠ·Π²Π°Π½ΠΎ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΈ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π΅Π»Π΅Π³Π°Ρ‚Π°. НаконСц, Π² этой Π³Π»Π°Π²Π΅ Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны Π½ΠΎΠ²Ρ‹Π΅ возмоТности языка C#, связанныС с использованиСм Π΄Π΅Π»Π΅Π³Π°Ρ‚ΠΎΠ² ΠΈ событий, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ Π³Ρ€ΡƒΠΏΠΏΠΎΠ²Ρ‹Π΅ прСобразования ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ†Π΅Π»Π΅Π²Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… событий.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°

ΠŸΡ€ΠΈ рассмотрСнии ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Π³Π»Π°Π²Ρ‹ Π²Ρ‹ ΠΈΠΌΠ΅Π»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ интСрфСйсы ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Π΄ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ самыми Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ. ΠšΡ€ΠΎΠΌΠ΅ использований интСрфСйсов для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ°, ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π² качСствС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π΄Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ двухсторонний ΠΎΠ±ΠΌΠ΅Π½, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠ±Ρ‰Π΅Π΅ мноТСство Ρ‡Π»Π΅Π½ΠΎΠ².

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ использования интСрфСйсов ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°, ΠΌΡ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΉ Π½Π°ΠΌ Ρ‚ΠΈΠΏ Car Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΠΌΠΎΠ³ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ сторону ΠΎ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΠΈ ΠΏΠΎΠ»ΠΎΠΌΠΊΠΈ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ (Ρ‚.Π΅. ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ тСкущая ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π½Π° 10 ΠΊΠΌ/Ρ‡ Π½ΠΈΠΆΠ΅ максимальной скорости) ΠΈ ΠΎ ΡΠ²Π΅Ρ€ΡˆΠΈΠ²ΡˆΠ΅ΠΉΡΡ ΠΏΠΎΠ»ΠΎΠΌΠΊΠ΅ (ΠΊΠΎΠ³Π΄Π° тСкущая ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π²Π½Π° ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅ максимальной скорости). Π‘ΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡΡ‹Π»Π°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ события Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ интСрфСйса, носящСго имя IEngineEvents.

// Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°.

public interface IEngineEvents {

 void AboutToBlow(string msg);

 void Exploded (string msg);

}

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ событий ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, нСпосрСдствСнно "заинтСрСсованным" Π² ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ событий, Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ-ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠΎΠΌ. ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»ΡŒ событий (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС это Ρ‚ΠΈΠΏ Car) ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… условиях выполняСт для ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ класс ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ° называСтся CarEventSink, ΠΈ ΠΎΠ½ просто Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΠ΅ сообщСния Π½Π° консоль. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, наш ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ содСрТит строку, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π΅Π³ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ имя.

// ΠŸΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ событий Car.

public class CarEventSink: IEngineEvents {

 private string name;

 public CarEventSink(){}

 public CarEventSink(string sinkName) { name = sinkName; }

 public void AboutToBlow(string msg) { Console.WriteLine("{0} сообщаСт: {1}", name, msg); }

 public void Exploded(string msg) { Console.WriteLine(" {0} сообщаСт: {1}", name, msg); }

}

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйс событий, нашСй ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ являСтся ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ссылки Π½Π° этот ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ Π² Ρ‚ΠΈΠΏ Car. Π’ΠΈΠΏ Car Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ эту ссылку ΠΈ ΠΏΡ€ΠΈ нСобходимости Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ°. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ‚ΠΈΠΏ Car ΠΌΠΎΠ³ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ссылку Π½Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ, Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Ρ‚ΠΈΠΏ Car Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ‡Π»Π΅Π½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Advise(). Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅. Ссли Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ сторона ΠΏΠΎΠΆΠ΅Π»Π°Π΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ привязку ΠΊ источнику событий, ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ‚ΠΈΠΏΠ° Car – ΠΌΠ΅Ρ‚ΠΎΠ΄ Unadvise(). НаконСц, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ сторонС Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ мноТСство ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠΎΠ² событий (с Ρ†Π΅Π»ΡŒΡŽ Π³Ρ€ΡƒΠΏΠΏΠΎΠ²ΠΎΠΉ адрСсации), Ρ‚ΠΈΠΏ Car ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ArrayList для прСдставлСния исходящих соСдинСний.

// Π’ΠΈΠΏ Car ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ сторона ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒΡΡ

// с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ интСрфСйса IEngineEvents.

public class Car {

 // Набор связанных ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠΎΠ².

 ArrayList clientSinks = new ArrayList();

 // ΠŸΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΊ источнику событий ΠΈΠ»ΠΈ отсоСдинСниС ΠΎΡ‚ Π½Π΅Π³ΠΎ.

 public void Advise(IEngineEvents sink) {clientSinks.Add(sink);}

 public void Unadvise(IEngineEvents sink) {clientSinks.Remove(sink);}

 β€¦

}

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π° самом Π΄Π΅Π΄Π΅ ΠΏΠΎΡΡ‹Π»Π°Ρ‚ΡŒ события, ΠΌΡ‹ ΠΎΠ±Π½ΠΎΠ²ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ Car.Accelerate() Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ осущСствлял "ΠΏΡ€ΠΎΡ…ΠΎΠ΄" ΠΏΠΎ соСдинСниям, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Π² ArrayList, ΠΈ ΠΏΡ€ΠΈ нСобходимости Π²Ρ‹Π΄Π°Π²Π°Π» подходящСС сообщСниС (ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π² классС Car Π΅ΡΡ‚ΡŒ Ρ‡Π»Π΅Π½-пСрСмСнная carIsDead логичСского Ρ‚ΠΈΠΏΠ° для прСдставлСния состояния двигатСля ΠΌΠ°ΡˆΠΈΠ½Ρ‹).