Чтение онлайн

на главную - закладки

Жанры

C# 4.0 полное руководство - 2011

Шилдт Герберт

Шрифт:

using System;

// Объявить тип делегата для события, delegate void MyEventHandler ;

// Объявить класс, содержащий событие, class MyEvent {

public event MyEventHandler SomeEvent;

// Этот метод вызывается для запуска события, public void OnSomeEvent {

if(SomeEvent != null)

SomeEvent ;

}

}

class X { int id;

public X(int x) { id = x; }

//

Этот метод экземпляра предназначен в качестве обработчика событий, public void Xhandler {

Console.WriteLine("Событие получено объектом " + id);

}

}

class EventDemo3 { static void Main {

MyEvent evt = new MyEvent;

X ol = new X(1);

X o2 = new X (2);

X o3 = new X(3); evt.SomeEvent += ol.Xhandler; evt.SomeEvent += o2.Xhandler; evt.SomeEvent += o3.Xhandler;

// Запустить событие, evt.OnSomeEvent ;

}

}

Выполнение кода из этого примера приводит к следующему результату.

Событие получено объектом 1 Событие получено объектом 2 Событие получено объектом 3

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

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

/* Уведомления о событии получает класс, когда статический метод используется в качестве обработчика событий. */

using System;

// Объявить тип делегата для события, delegate void MyEventHandler;

// Объявить класс, содержащий событие, class MyEvent {

public event MyEventHandler SomeEvent;

// Этот метод вызывается для запуска события, public void OnSomeEvent {

if (SomeEvent != null)

SomeEvent ;

}

}

class X {

/* Этот статический метод предназначен в качестве обработчика событий. */ public static void Xhandler {

Console.WriteLine("Событие получено классом.");

}

}

class EventDemo4 { static void Main {

MyEvent evt = new MyEvent;

evt.SomeEvent += X.Xhandler;

// Запустить событие, evt.OnSomeEvent;

При

выполнение кода этого примера получается следующий результат.

Событие получено классом.

Обратите в данном примере внимание на то, что объекты класса X вообще не создаются. Но поскольку Xhandler является статическим методом класса X, то он может быть привязан к событию SomeEvent и выполнен при вызове метода

OnSomeEvent.

Применение аксессоров событий

В приведенных выше примерах события формировались в форме, допускавшей автоматическое управление списком вызовов обработчиков событий, включая добавление и удаление обработчиков событий из списка. Поэтому управление этим списком не нужно было организовывать вручную. Благодаря именно этому свойству такие события используются чаще всего. Тем не менее организовать управление списком вызовов обработчиков событий можно и вручную, чтобы, например, реализовать специальный механизм сохранения событий.

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

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

// Код добавления события в цепочку событий.

}

remove {

// Код удаления события из цепочки событий.

}

}

В эту форму входят два аксессора событий: add и remove. Аксессор add вызывается, когда обработчик событий добавляется в цепочку событий с помощью оператора +=. В то же время аксессор remove вызывается, когда обработчик событий удаляется из цепочки событий с помощью оператора -=.

Когда вызывается аксессор add или remove, он принимает в качестве параметра добавляемый или удаляемый обработчик. Как и в других разновидностях аксессоров, этот неявный параметр называется value. Реализовав аксессоры add или remove, можно организовать специальную схему хранения обработчиков событий. Например, обработчики событий можно хранить в массиве, стеке или очереди.

Поделиться:
Популярные книги

АН (цикл 11 книг)

Тарс Элиан
Аномальный наследник
Фантастика:
фэнтези
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
АН (цикл 11 книг)

Найдёныш. Книга 2

Гуминский Валерий Михайлович
Найденыш
Фантастика:
альтернативная история
4.25
рейтинг книги
Найдёныш. Книга 2

Сопряжение 9

Астахов Евгений Евгеньевич
9. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
технофэнтези
рпг
5.00
рейтинг книги
Сопряжение 9

Курсант: Назад в СССР 4

Дамиров Рафаэль
4. Курсант
Фантастика:
попаданцы
альтернативная история
7.76
рейтинг книги
Курсант: Назад в СССР 4

Неправильный боец РККА Забабашкин 3

Арх Максим
3. Неправильный солдат Забабашкин
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Неправильный боец РККА Забабашкин 3

Никчёмная Наследница

Кат Зозо
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Никчёмная Наследница

Сердце Дракона. Том 11

Клеванский Кирилл Сергеевич
11. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
6.50
рейтинг книги
Сердце Дракона. Том 11

Шесть принцев для мисс Недотроги

Суббота Светлана
3. Мисс Недотрога
Фантастика:
фэнтези
7.92
рейтинг книги
Шесть принцев для мисс Недотроги

Проданная Истинная. Месть по-драконьи

Белова Екатерина
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Проданная Истинная. Месть по-драконьи

На границе империй. Том 6

INDIGO
6. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.31
рейтинг книги
На границе империй. Том 6

Черный Маг Императора 10

Герда Александр
10. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 10

Измена. Верни мне мою жизнь

Томченко Анна
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Верни мне мою жизнь

Леди для короля. Оборотная сторона короны

Воронцова Александра
3. Королевская охота
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Леди для короля. Оборотная сторона короны

Курсант: Назад в СССР 7

Дамиров Рафаэль
7. Курсант
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Курсант: Назад в СССР 7