Обробка і виклик подій
Події в платформі .NET Framework засновані на моделі делегата. Модель делегата реалізує шаблон спостерігача, який дозволяє передплатнику зареєструватися у постачальника подій і отримувати від нього повідомлення. Відправник подій відправляє повідомлення про те, що відбулася подія, а приймач подій отримує повідомлення про втрату чинності і визначає відповідь на нього. У цьому розділі описуються основні компоненти моделі делегата, використання подій в додатках і реалізація подій в коді.
Подія являє собою повідомлення, що посилається об'єктом, щоб сигналізувати про вчинення будь-які дії. Така дія може бути викликано діями користувача, наприклад натисненням кнопки, або ця дія може бути викликана іншою програмної логікою, наприклад зміною значення властивості. Об'єкт, що викликає подія, називається відправником події. Відправнику події ніхто не знає об'єкт або метод, який буде отримувати (обробляти) сформовані відправником події. Подія зазвичай є членом відправника події; наприклад, подія Click є членом класу Button. а подія PropertyChanged - член класу, що реалізовує інтерфейс INotifyPropertyChanged.
Як правило, для виклику події, необхідно додати метод, який відзначений як protected і virtual (в C #) або Protected і Overridable (в Visual Basic). Назвіть цей метод OnEventName; наприклад, OnDataReceived. Метод повинен приймати один параметр, який визначає об'єкт даних події. Надайте цей метод, щоб похідні класи могли перевизначати логіку для виклику події. Похідний клас повинен завжди викликати метод OnEventName базового класу, щоб зареєстровані делегати гарантовано отримали подія.
NET Framework дозволяє передплатникам реєструватися для отримання повідомлень про події як статично, так і динамічно. Статичні обробники подій діють протягом усього терміну існування класу, події якого вони обробляють. Динамічні обробники подій явно активуються і деактивуються під час виконання програми. Зазвичай це відбувається при виконанні будь-яких умов, визначених логікою програми. Наприклад, їх можна використовувати у випадках, коли повідомлення про події потрібні тільки в певних випадках або коли в додатку використовується кілька обробників подій і потрібний з них визначається під час виконання програми. У прикладі в попередньому розділі показано, як динамічно додавати обробник подій. Додаткові відомості див. У розділах Події (Visual Basic) і Події (Керівництво з програмування в C #).
Якщо клас створює кілька подій, компілятор створює одне поле для кожного екземпляра делегата події. Якщо кількість подій велике, то витрати ресурсів на зберігання одного поля для кожного делегата можуть стати неприйнятними. Для таких випадків в середовищі .NET Framework надаються властивості події, які можна використовувати разом з іншою структурою даних (за вашим вибором) для зберігання делегатів події.