Механизм событий

Содержание

Слайд 2

События События позволяют классу или объекту уведомлять другие классы или объекты

События

События позволяют классу или объекту уведомлять другие классы или объекты о возникновении каких-либо

ситуаций. Класс, отправляющий (или вызывающий) событие, называется издателем, а классы, принимающие (или обрабатывающие) событие, называются подписчиками.
Слайд 3

Описание события [ атрибуты ] [ спецификаторы ] event тип имя обытия

Описание события

[ атрибуты ] [ спецификаторы ] event тип имя обытия

Слайд 4

Описание события

Описание события

Слайд 5

Процесс создания события Создание события в классе состоит из следующих частей:

Процесс создания события

Создание события в классе состоит из следующих частей:
описание делегата,

задающего сигнатуру обработчиков событий;
описание события;
описание метода (методов), инициирующих событие.
Слайд 6

Пример события public delegate void Del( object о ); // объявление

Пример события

public delegate void Del( object о ); // объявление делегата
class

А
{
public event Del Oops; // объявление события
}
Слайд 7

Важно помнить Событие — это удобная абстракция для программиста. На самом

Важно помнить

Событие — это удобная абстракция для программиста. На самом деле

оно состоит из закрытого статического класса, в котором создается экземпляр делегата, и двух методов, предназначенных для добавления и удаления обработчика из списка этого делегата.
Слайд 8

Подписка на событие Внешний код может работать с событиями единственным образом:

Подписка на событие

Внешний код может работать с событиями единственным образом: добавлять

обработчики(+=) в список или удалять их(-=).
Слайд 9

Паттерн наблюдатель Через делегаты Через события

Паттерн наблюдатель

Через делегаты

Через события

Слайд 10

Паттерн наблюдатель Через делегаты Через события

Паттерн наблюдатель

Через делегаты

Через события

Слайд 11

Полная форма события Имя делегата заканчивается суффиксом EventHandler; делегат получает два

Полная форма события

Имя делегата заканчивается суффиксом EventHandler;
делегат получает два параметра:
О первый

параметр задает источник события и имеет тип object;
О второй параметр задает аргументы события и имеет тип EventArgs или производный от него.
Слайд 12

Полная форма события

Полная форма события

Слайд 13

Слайд 14

Анонимный обработчик

Анонимный обработчик

Слайд 15

Аргументы события EventArgs служит в качестве базового класса, от которого получается

Аргументы события

EventArgs служит в качестве базового класса, от которого получается производный

класс, содержащий все необходимые поля для обработчика событий.
Слайд 16

Аргументы события class MyEventArgs : EventArgs { public char ch; }

Аргументы события

class MyEventArgs : EventArgs
{ public char ch; }

Слайд 17

Аргументы события class KeyEvent { // Создадим событие, используя обобщенный делегат

Аргументы события

class KeyEvent {
// Создадим событие, используя обобщенный делегат
public


event EventHandler KeyDown;
public void OnKeyDown(char ch) {
MyEventArgs c = new MyEventArgs();
if (KeyDown != null)
{ c.ch = ch; KeyDown(this, c); } } }
Слайд 18

Аксессоры событий event делегат_события имя_события { add { // Код добавления

Аксессоры событий

event делегат_события имя_события {
add { // Код добавления события

в цепочку событий }
remove { // Код удаления события из цепочки событий } }
Слайд 19

Аксессоры событий Длинная нотация для определения событий удобна, если необходимо сделать

Аксессоры событий

Длинная нотация для определения событий удобна, если необходимо сделать нечто

большее, чем просто добавлять и удалять обработчики событий, например, добавить синхронизацию для многопоточного доступа.