Добавить метод 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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!