2. Поняття делегата
Делегат – це об’єкт який може посилатись на метод.
Делегат може зберігати посилання на метод і з його
допомогою викликати даний метод. Технічно делегат
- це тип посилання, якій інкапсолює метод з
вказаною сигнатурою і типом повернення.
Andrii Hladkyi
trilobt@gmail.com 2
3. Синтаксис оголошення делегата
Для оголошення делегата використовується ключове слова delegate.
Type – тип повернення
DelegateName – ім’я делегата
List - список параметрів, необхідних методам при виклику їх за
допомогою делегата.
Делегат може викликати як методи екземплярів класу так і
статичні методи
Делегат може приймати один з п’яти модифікаторів доступу
Andrii Hladkyi
trilobt@gmail.com 3
delegate Type DelegateName (List)
5. Цілі і задачі делегата
Делегати використовуються в наступних
випадках:
◦ При паралельному запуску декількох операцій одночасно
◦ При роботі з графічним інтерфейсом користувача
використовуються події. Ми заздалегідь не знаємо, які діє
виконає користувач і відповідно які методи потрібно
викликати
Делегат дозволяє визначити, який метод
потрібно викликати не на етапі компіляції а
на етапі виконання.
Andrii Hladkyi
trilobt@gmail.com 5
7. Виклик декількох методів через делегат (multicasting)
Коли необхідно викликати з одного делегата два чи
більше методів.
Для реалізації множинного делегування делегат
повинен повертати тип void.
Додавання методів до списку викликів делегата
виконуються за допомогою операції +=
Видалення методів із списку викликів виконується за
допомогою операції -=
Об’єднати делегати можна за допомогою операції +.
Отримаємо новий делегат, який буде викликати
методи об’єднаних делегатів
Andrii Hladkyi
trilobt@gmail.com 7
9. Поняття події
Подія – це повідомлення про виникнення деякої дії.
Це може бути натиснення на кнопку, вибір елементу
із списку і т.д.
Відправником події може бути будь який компонент
форми, або сам додаток.
Відправник – це об’єкт, який генерує подію.
Отримати повідомлення про подію може будь який
інший об’єкт, якому це потрібно.
Andrii Hladkyi
trilobt@gmail.com 9
10. Поняття події
Для того щоб об’єкт знав про виникнення даної
події, його потрібно підписати на цю подію.
Потрібно задати метод обробник даної події.
Для реалізації події використовуються делегати.
Об’єкт відправник визначає делегат, а кожний об’єкт
отримувач додає свій метод обробник ланцюжок
посилань делегата. Виклик ланцюжка методів
здійснює об’єкт відправник, ініціює виконання всіх
методів.
Andrii Hladkyi
trilobt@gmail.com 10
11. Синтаксис оголошення події
Для оголошення події використовується ключове слово event.
DelegateName – ім’я використовуваного делегата
EventName – ім’я події
Якщо на подію немає підписаних обробників, то вона має значення
null, а її виклик викликає помилку виконання. Існує домовленість, по
якій делегати обробники подій повертають тип void і мають два
параметри. Перший - об’єкт відправник тип object, а другий – об’єкт,
що містить інформацію і параметри події, похідний від класу
EventArgs.
Розглянемо клас Person, який має метод Work() і подію, яка немає
параметрів, WorkEnded, що інформує про завершення виконання
роботи.
Andrii Hladkyi
trilobt@gmail.com 11
event DelegateName EventName;
13. Необхідність і особливість використання подій
Головним плюсом подій є те, що вони дозволяють
зробити об’єкт відправник і об’єкт отримувач
незалежними один від одного, так як вони розділені
делегатом. Це робить код більш гнучким, дозволяє
розробнику змінювати реакцію на подію, додавати
нових підписників.
Andrii Hladkyi
trilobt@gmail.com 13
14. Застосування подій для багато адресного делегата
Одна подія може активізувати декілька обробників, навіть якщо
вини оголошені в інших об’єктах.
Створимо клас Ticker, його метод RunTicker() генерує подію
TickEvent кожні 10 мс.
Andrii Hladkyi
trilobt@gmail.com 14
16. Використання подійних засобів доступу
В C# існує форма event-інструкцій, яка дозволяє
використовувати засоби доступу до подій. Ці засоби доступу
дають можливість керувати реалізацією списком обробників
подій.
Andrii Hladkyi
trilobt@gmail.com 16
even nameDelegate nameEvent
{
add { //Код додання подій в список подій }
remove { //Код видалення подій із списку подій }
}
17. Анонімні методи
Анонімний метод – це блок коду, який приймає в
якості параметра делегат. Він має “заголовок”, який
містить ключове слово delegate і список параметрів
анонімного методу.
При обробці подій також можна використовувати
анонімні методи.
Andrii Hladkyi
trilobt@gmail.com 17
19. Andrii Hladkyi
trilobt@gmail.com 19
Реалізувати метод, який здійснює пошук елемента в
масиві. Метод повинен приймати масив Object[] array,
в якому повинен здійснюватись пошук, і делегат, що
визначає чи являється елемент шуканим