Добавить метод Handler() в список событий,
evt.SomeEvent += Handler;
Запустить событие,
evt.OnSomeEvent();
}
}
Вот какой результат получается при выполнении этого кода.
Произошло событие
Несмотря на всю свою простоту, данный пример кода содержит все основные элементы, необходимые для обработки событий. Он начинается с объявления типа делегата для обработчика событий, как показано ниже.
delegate void MyEventHandler();
Все события активизируются с помощью делегатов. Поэтому тип делегата события определяет возвращаемый тип и сигнатуру для события. В данном случае параметры события отсутствуют, но их разрешается указывать.
Далее создается класс события MyEvent. В этом классе объявляется событие SomeEvent в следующей строке кода.
public event MyEventHandler SomeEvent;
Обратите внимание на синтаксис этого объявления. Ключевое слово event уведомляет компилятор о том, что объявляется событие.
Кроме того, в классе MyEvent объявляется метод OnSomeEvent(), вызываемый для сигнализации о запуске события. Это означает, что он вызывается, когда происходит событие. В методе OnSomeEvent() вызывается обработчик событий с помощью делегата SomeEvent.
if(SomeEvent != null)
SomeEvent();
Как видите, обработчик вызывается лишь в том случае, если событие SomeEvent не является пустым. А поскольку интерес к событию должен быть зарегистрирован в других частях программы, чтобы получать уведомления о нем, то метод OnSomeEvent() может быть вызван до регистрации любого обработчика события. Но во избежание вызова по пустой ссылке делегат события должен быть проверен, чтобы убедиться в том, что он не является пустым.
|
|
В классе EventDemo создается обработчик событий Handler(). В данном простом примере обработчик событий просто выводит сообщение, но другие обработчики могут выполнять более содержательные функции. Далее в методе Main() создается объект класса события MyEvent, a Handler() регистрируется как обработчик этого события, добавляемый в список.
MyEvent evt = new MyEvent();
// Добавить метод Handler() в список событий,
evt.SomeEvent += Handler;
Обратите внимание на то, что обработчик добавляется в список с помощью оператора +=. События поддерживают только операторы += и -=. В данном случае метод Handler() является статическим, но в качестве обработчиков событий могут также служить методы экземпляра.
И наконец, событие запускается, как показано ниже.
// Запустить событие,
evt.OnSomeEvent();
Вызов метода OnSomeEvent() приводит к вызову всех событий, зарегистрированных обработчиком. В данном случае зарегистрирован только один такой обработчик, но их может быть больше, как поясняется в следующем разделе.
Пример групповой адресации события
Как и делегаты, события поддерживают групповую адресацию. Это дает возможность нескольким объектам реагировать на уведомление о событии. Ниже приведен пример групповой адресации события.
|
|
// Продемонстрировать групповую адресацию события,
using System;
// Объявить тип делегата для события,
delegate void MyEventHandler() ;
// Объявить делегат, содержащий событие,
class MyEvent {
public event MyEventHandler SomeEvent;
Этот метод вызывается для запуска события,
public void OnSomeEvent() {
if(SomeEvent != null)
SomeEvent();
}
}
class X {
public void Xhandler() {
Console.WriteLine("Событие получено объектом класса X");
}
}
class Y {
public void Yhandler() {
Console.WriteLine("Событие получено объектом класса Y");
}
}
class EventDemo2 {
static void Handler() {
Console.WriteLine("Событие получено объектом класса EventDemo");
}
static void Main() {
MyEvent evt = new MyEvent();
X xOb = new X();
Y yOb = new Y();
Добавить обработчики в список событий.
evt.SomeEvent += Handler;
evt.SomeEvent += xOb.Xhandler;
evt.SomeEvent += yOb.Yhandler;
// Запустить событие, evt.OnSomeEvent() ;
Console.WriteLine() ;
Удалить обработчик.
evt.SomeEvent -= xOb.Xhandler;
evt.OnSomeEvent() ;
}
}
При выполнении кода этого примера получается следующий результат.
Событие получено объектом класса EventDemo
Событие получено объектом класса X
|
|
Событие получено объектом класса Y
Дата добавления: 2019-02-12; просмотров: 281; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!