SlideShare a Scribd company logo
.NET Framework і C#
Модуль 12 Делегати, події
В цьому модулі:
 Поняття делегата
 Синтаксис оголошення делегата
 Цілі і задачі делегата
 Виклик декілька методів через делегат
 Виклик декількох методів через делегат (multicasting)
 Базовий клас для делегатів
◦ System.Delegate
◦ System.MulticastDelegate
 Події
 Поняття події
 Синтаксис оголошення подій
 Необхідність і особливість використання подій
 Використання подій для багато адресного делегата
 Використання подійних засобів доступу
 Анонімні методи
2
Andriy Gladkyy
KspDevelop@gmail.com
Поняття делегата
 Делегат – це об’єкт який може посилатись на метод.
Делегат може зберігати посилання на метод і з його
допомогою викликати даний метод. Технічно делегат
- це тип посилання, якій інкапсолює метод з
вказаною сигнатурою і типом повернення.
Andriy Gladkyy
KspDevelop@gmail.com 3
Синтаксис оголошення делегата
 Для оголошення делегата використовується ключове слова delegate.
 Type – тип повернення
 DelegateName – ім’я делегата
 List - список параметрів, необхідних методам при виклику їх за
допомогою делегата.
 Делегат може викликати як методи екземплярів класу так і
статичні методи
 Делегат може приймати один з п’яти модифікаторів доступу
Andriy Gladkyy
KspDevelop@gmail.com 4
delegate Type DelegateName (List)
Andriy Gladkyy
KspDevelop@gmail.com 5
Демонстрація
Цілі і задачі делегата
 Делегати використовуються в наступних
випадках:
◦ При паралельному запуску декількох операцій одночасно
◦ При роботі з графічним інтерфейсом користувача
використовуються події. Ми заздалегідь не знаємо, які діє
виконає користувач і відповідно які методи потрібно
викликати
 Делегат дозволяє визначити, який метод
потрібно викликати не на етапі компіляції а
на етапі виконання.
Andriy Gladkyy
KspDevelop@gmail.com 6
Andriy Gladkyy
KspDevelop@gmail.com 7
Демонстрація
Виклик декількох методів через делегат (multicasting)
 Коли необхідно викликати з одного делегата два чи
більше методів.
 Для реалізації множинного делегування делегат
повинен повертати тип void.
 Додавання методів до списку викликів делегата
виконуються за допомогою операції +=
 Видалення методів із списку викликів виконується за
допомогою операції -=
 Об’єднати делегати можна за допомогою операції +.
Отримаємо новий делегат, який буде викликати
методи об’єднаних делегатів
Andriy Gladkyy
KspDevelop@gmail.com 8
Andriy Gladkyy
KspDevelop@gmail.com 9
Демонстрація
Розглянемо клас Circle, в якому описані чотири методи, які виводять в на
консоль радіус, діаметр, довжину окружності, площу кола
Базові класи для делегатів
 System.Delegate являється базовим для типів делегатів. Однак лише система
і компілятор можуть явно наслідувати класи Delegate і MulticastDelegate.
Також не можна створити
Andriy Gladkyy
KspDevelop@gmail.com 10
Andriy Gladkyy
KspDevelop@gmail.com 11
 System.MulticastDelegate. Будь який клас делегат наслідує
System.MulticastDelegate. Це пояснює багато адресність
делегатів: в ході виконання додатка об’єкт делегат здатний
запам’ятати посилання на різну кількість методів не залежно
від їхньої статичності, не статичності чи приналежності
класам.
 Багато адресність забезпечується внутрішнім списком, в якому
зберігаються посилання на методи, що відповідають заданій
сигнатурі і специфікації типу повернення.
Andriy Gladkyy
KspDevelop@gmail.com 12
Поняття події
 Подія – це повідомлення про виникнення деякої дії.
Це може бути натиснення на кнопку, вибір елементу
із списку і т.д.
 Відправником події може бути будь який компонент
форми, або сам додаток.
 Відправник – це об’єкт, який генерує подію.
Отримати повідомлення про подію може будь який
інший об’єкт, якому це потрібно.
Andriy Gladkyy
KspDevelop@gmail.com 13
Поняття події
 Для того щоб об’єкт знав про виникнення даної
події, його потрібно підписати на цю подію.
Потрібно задати метод обробник даної події.
 Для реалізації події використовуються делегати.
Об’єкт відправник визначає делегат, а кожний об’єкт
отримувач додає свій метод обробник ланцюжок
посилань делегата. Виклик ланцюжка методів
здійснює об’єкт відправник, ініціює виконання всіх
методів.
Andriy Gladkyy
KspDevelop@gmail.com 14
Синтаксис оголошення події
 Для оголошення події використовується ключове слово event.
 DelegateName – ім’я використовуваного делегата
 EventName – ім’я події
 Якщо на подію немає підписаних обробників, то вона має значення
null, а її виклик викликає помилку виконання. Існує домовленість, по
якій делегати обробники подій повертають тип void і мають два
параметри. Перший - об’єкт відправник тип object, а другий – об’єкт,
що містить інформацію і параметри події, похідний від класу
EventArgs.
 Розглянемо клас Person, який має метод Work() і подію, яка немає
параметрів, WorkEnded, що інформує про завершення виконання
роботи.
Andriy Gladkyy
KspDevelop@gmail.com 15
event DelegateName EventName;
Andriy Gladkyy
KspDevelop@gmail.com 16
Демонстрація
Необхідність і особливість використання подій
 Головним плюсом подій є те, що вони дозволяють
зробити об’єкт відправник і об’єкт отримувач
незалежними один від одного, так як вони розділені
делегатом. Це робить код більш гнучким, дозволяє
розробнику змінювати реакцію на подію, додавати
нових підписників.
Andriy Gladkyy
KspDevelop@gmail.com 17
Застосування подій для багато адресного делегата
 Одна подія може активізувати декілька обробників, навіть якщо
вини оголошені в інших об’єктах.
Створимо клас Ticker, його метод RunTicker() генерує подію
TickEvent кожні 10 мс.
Andriy Gladkyy
KspDevelop@gmail.com 18
Andriy Gladkyy
KspDevelop@gmail.com 19
Демонстрація
Використання подійних засобів доступу
 В C# існує форма event-інструкцій, яка дозволяє
використовувати засоби доступу до подій. Ці засоби доступу
дають можливість керувати реалізацією списком обробників
подій.
Andriy Gladkyy
KspDevelop@gmail.com 20
even nameDelegate nameEvent
{
add { //Код додання подій в список подій }
remove { //Код видалення подій із списку подій }
}
Анонімні методи
 Анонімний метод – це блок коду, який приймає в
якості параметра делегат. Він має “заголовок”, який
містить ключове слово delegate і список параметрів
анонімного методу.
 При обробці подій також можна використовувати
анонімні методи.
Andriy Gladkyy
KspDevelop@gmail.com 21
Andriy Gladkyy
KspDevelop@gmail.com 22
Демонстрація
Andriy Gladkyy
KspDevelop@gmail.com 23
Реалізувати метод, який здійснює пошук елемента в
масиві. Метод повинен приймати масив Object[] array,
в якому повинен здійснюватись пошук, і делегат, що
визначає чи являється елемент шуканим

More Related Content

PPTX
NET Framework and C# Module 6. Delegates, Events
PPTX
NET Framework and C# Module 12.2. Garbage Collector
PPTX
Net Framework and C# Module 3 4. Inheritance, Abstractions
PPTX
Net framework і c# module 9
PPTX
System programing module 2. Threads
PPTX
System programing module 1. Processes
PPTX
Advanced C#. Part 2
PPTX
NET Framework and C# Module 5. Interfaces
NET Framework and C# Module 6. Delegates, Events
NET Framework and C# Module 12.2. Garbage Collector
Net Framework and C# Module 3 4. Inheritance, Abstractions
Net framework і c# module 9
System programing module 2. Threads
System programing module 1. Processes
Advanced C#. Part 2
NET Framework and C# Module 5. Interfaces

Viewers also liked (7)

PPTX
Uml module 5
PPTX
Net framework і c# module 7_old
PPTX
Uml module 6
PPT
Prototype Design Pattern
PPTX
Net framework і c# lesson1
PPTX
Prototype Pattern
PPTX
Design pattern module 1
Uml module 5
Net framework і c# module 7_old
Uml module 6
Prototype Design Pattern
Net framework і c# lesson1
Prototype Pattern
Design pattern module 1
Ad

Similar to Net framework і c# module 12 (20)

PPTX
Net framework і c# module 8
PDF
лаб. роб. №2 обєкти та сервіси що ними надаються
PPTX
Net Framework and c# module 2. OOP
PPTX
Net framework і c# module 4
PPTX
System programing module 1
PPTX
PPTX
Net framework і c# module 15
PPTX
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
PPTX
System programing module 2
PPT
Lec12 користувацькi елементи керування ed
PPTX
Net framework і c# module 10
PPTX
презентація поняття події
PPTX
ASP.NET Core лекція 02.pptx
PPTX
Patterns.pptx
PPTX
Лекція №12 Передача параметрів у функцію.pptx
PPTX
Design pattern module 1
PPTX
Інформатика 8 клас
PPTX
Net framework і c# module 11
PPTX
Net framework і c# module 16
PPT
Using Metatags in Flex Developing
Net framework і c# module 8
лаб. роб. №2 обєкти та сервіси що ними надаються
Net Framework and c# module 2. OOP
Net framework і c# module 4
System programing module 1
Net framework і c# module 15
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
System programing module 2
Lec12 користувацькi елементи керування ed
Net framework і c# module 10
презентація поняття події
ASP.NET Core лекція 02.pptx
Patterns.pptx
Лекція №12 Передача параметрів у функцію.pptx
Design pattern module 1
Інформатика 8 клас
Net framework і c# module 11
Net framework і c# module 16
Using Metatags in Flex Developing
Ad

More from Andrii Hladkyi (18)

PPTX
Net framework and C# module 17. Serialization
PPTX
NET Framework and C# Module 6.2. Generics
PPTX
Net Framework and c# Lesson 1
PPTX
Wpf module 2
PPTX
Wpf module 1
PPTX
Msp module 3
PPTX
Msp module 2
PPTX
Msp module 1
PPTX
Ado.net module 2
PPTX
Ado.net module 1
PPTX
Win api module_2.0_gdi+
PPTX
Win api module_1.1_ok
PPTX
Win api module_6.2
PPTX
Uml module 4
PPTX
Uml module 3
PPTX
Uml module 2
PPTX
Uml module 1
PPTX
System programing module 3
Net framework and C# module 17. Serialization
NET Framework and C# Module 6.2. Generics
Net Framework and c# Lesson 1
Wpf module 2
Wpf module 1
Msp module 3
Msp module 2
Msp module 1
Ado.net module 2
Ado.net module 1
Win api module_2.0_gdi+
Win api module_1.1_ok
Win api module_6.2
Uml module 4
Uml module 3
Uml module 2
Uml module 1
System programing module 3

Net framework і c# module 12

  • 1. .NET Framework і C# Модуль 12 Делегати, події
  • 2. В цьому модулі:  Поняття делегата  Синтаксис оголошення делегата  Цілі і задачі делегата  Виклик декілька методів через делегат  Виклик декількох методів через делегат (multicasting)  Базовий клас для делегатів ◦ System.Delegate ◦ System.MulticastDelegate  Події  Поняття події  Синтаксис оголошення подій  Необхідність і особливість використання подій  Використання подій для багато адресного делегата  Використання подійних засобів доступу  Анонімні методи 2 Andriy Gladkyy KspDevelop@gmail.com
  • 3. Поняття делегата  Делегат – це об’єкт який може посилатись на метод. Делегат може зберігати посилання на метод і з його допомогою викликати даний метод. Технічно делегат - це тип посилання, якій інкапсолює метод з вказаною сигнатурою і типом повернення. Andriy Gladkyy KspDevelop@gmail.com 3
  • 4. Синтаксис оголошення делегата  Для оголошення делегата використовується ключове слова delegate.  Type – тип повернення  DelegateName – ім’я делегата  List - список параметрів, необхідних методам при виклику їх за допомогою делегата.  Делегат може викликати як методи екземплярів класу так і статичні методи  Делегат може приймати один з п’яти модифікаторів доступу Andriy Gladkyy KspDevelop@gmail.com 4 delegate Type DelegateName (List)
  • 6. Цілі і задачі делегата  Делегати використовуються в наступних випадках: ◦ При паралельному запуску декількох операцій одночасно ◦ При роботі з графічним інтерфейсом користувача використовуються події. Ми заздалегідь не знаємо, які діє виконає користувач і відповідно які методи потрібно викликати  Делегат дозволяє визначити, який метод потрібно викликати не на етапі компіляції а на етапі виконання. Andriy Gladkyy KspDevelop@gmail.com 6
  • 8. Виклик декількох методів через делегат (multicasting)  Коли необхідно викликати з одного делегата два чи більше методів.  Для реалізації множинного делегування делегат повинен повертати тип void.  Додавання методів до списку викликів делегата виконуються за допомогою операції +=  Видалення методів із списку викликів виконується за допомогою операції -=  Об’єднати делегати можна за допомогою операції +. Отримаємо новий делегат, який буде викликати методи об’єднаних делегатів Andriy Gladkyy KspDevelop@gmail.com 8
  • 9. Andriy Gladkyy KspDevelop@gmail.com 9 Демонстрація Розглянемо клас Circle, в якому описані чотири методи, які виводять в на консоль радіус, діаметр, довжину окружності, площу кола
  • 10. Базові класи для делегатів  System.Delegate являється базовим для типів делегатів. Однак лише система і компілятор можуть явно наслідувати класи Delegate і MulticastDelegate. Також не можна створити Andriy Gladkyy KspDevelop@gmail.com 10
  • 12.  System.MulticastDelegate. Будь який клас делегат наслідує System.MulticastDelegate. Це пояснює багато адресність делегатів: в ході виконання додатка об’єкт делегат здатний запам’ятати посилання на різну кількість методів не залежно від їхньої статичності, не статичності чи приналежності класам.  Багато адресність забезпечується внутрішнім списком, в якому зберігаються посилання на методи, що відповідають заданій сигнатурі і специфікації типу повернення. Andriy Gladkyy KspDevelop@gmail.com 12
  • 13. Поняття події  Подія – це повідомлення про виникнення деякої дії. Це може бути натиснення на кнопку, вибір елементу із списку і т.д.  Відправником події може бути будь який компонент форми, або сам додаток.  Відправник – це об’єкт, який генерує подію. Отримати повідомлення про подію може будь який інший об’єкт, якому це потрібно. Andriy Gladkyy KspDevelop@gmail.com 13
  • 14. Поняття події  Для того щоб об’єкт знав про виникнення даної події, його потрібно підписати на цю подію. Потрібно задати метод обробник даної події.  Для реалізації події використовуються делегати. Об’єкт відправник визначає делегат, а кожний об’єкт отримувач додає свій метод обробник ланцюжок посилань делегата. Виклик ланцюжка методів здійснює об’єкт відправник, ініціює виконання всіх методів. Andriy Gladkyy KspDevelop@gmail.com 14
  • 15. Синтаксис оголошення події  Для оголошення події використовується ключове слово event.  DelegateName – ім’я використовуваного делегата  EventName – ім’я події  Якщо на подію немає підписаних обробників, то вона має значення null, а її виклик викликає помилку виконання. Існує домовленість, по якій делегати обробники подій повертають тип void і мають два параметри. Перший - об’єкт відправник тип object, а другий – об’єкт, що містить інформацію і параметри події, похідний від класу EventArgs.  Розглянемо клас Person, який має метод Work() і подію, яка немає параметрів, WorkEnded, що інформує про завершення виконання роботи. Andriy Gladkyy KspDevelop@gmail.com 15 event DelegateName EventName;
  • 17. Необхідність і особливість використання подій  Головним плюсом подій є те, що вони дозволяють зробити об’єкт відправник і об’єкт отримувач незалежними один від одного, так як вони розділені делегатом. Це робить код більш гнучким, дозволяє розробнику змінювати реакцію на подію, додавати нових підписників. Andriy Gladkyy KspDevelop@gmail.com 17
  • 18. Застосування подій для багато адресного делегата  Одна подія може активізувати декілька обробників, навіть якщо вини оголошені в інших об’єктах. Створимо клас Ticker, його метод RunTicker() генерує подію TickEvent кожні 10 мс. Andriy Gladkyy KspDevelop@gmail.com 18
  • 20. Використання подійних засобів доступу  В C# існує форма event-інструкцій, яка дозволяє використовувати засоби доступу до подій. Ці засоби доступу дають можливість керувати реалізацією списком обробників подій. Andriy Gladkyy KspDevelop@gmail.com 20 even nameDelegate nameEvent { add { //Код додання подій в список подій } remove { //Код видалення подій із списку подій } }
  • 21. Анонімні методи  Анонімний метод – це блок коду, який приймає в якості параметра делегат. Він має “заголовок”, який містить ключове слово delegate і список параметрів анонімного методу.  При обробці подій також можна використовувати анонімні методи. Andriy Gladkyy KspDevelop@gmail.com 21
  • 23. Andriy Gladkyy KspDevelop@gmail.com 23 Реалізувати метод, який здійснює пошук елемента в масиві. Метод повинен приймати масив Object[] array, в якому повинен здійснюватись пошук, і делегат, що визначає чи являється елемент шуканим