Результирующая строка:    .тсет    йотсорп    отЭ

События

Еще одним важным средством С#, основывающимся на делегатах, являетсясобытие.Событие, по существу, представляет собой автоматическое уведомление о том, что произошло некоторое действие. События действуют по следующему принципу: объект, проявляющий интерес к событию, регистрирует обработчик этого события. Когда же событие происходит, вызываются все зарегистрированные обработчики этого события. Обработчики событий обычно представлены делегатами.

События являются членами класса и объявляются с помощью ключевого слова event. Чаще всего для этой цели используется следующая форма:

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

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

Рассмотрим для начала очень простой пример.

// Очень простой пример, демонстрирующий событие, using System;

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

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

public event MyEventHandler SomeEvent;

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

if (SomeEvent != null)

SomeEvent();

}

}

class EventDemo {

// Обработчик события, static void Handler ()    {

Console.WriteLine("Произошло событие");

}

static void Main() {

MyEvent evt = new MyEvent ();

// Добавить метод Handler() в список событий, evt.SomeEvent += Handler;

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

}

}

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

Произошло событие

Несмотря на всю свою простоту, данный пример кода содержит все основные элементы, необходимые для обработки событий. Он начинается с объявления типа делегата для обработчика событий, как показано ниже.

delegate void MyEventHandler();

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

Далее создается класс событияMyEvent.В этом классе объявляется событиеSomeEventв следующей строке кода.

public event MyEventHandler SomeEvent;

Обратите внимание на синтаксис этого объявления. Ключевое словоeventуведомляет компилятор о том, что объявляется событие.

Кроме того, в классеMyEventобъявляется методOnSomeEvent (), вызываемый для сигнализации о запуске события. Это означает, что он вызывается, когда происходит событие. В методеOnSomeEvent() вызывается обработчик событий с помощью делегатаSomeEvent.

if(SomeEvent != null)

SomeEvent();

Перейти на страницу:

Похожие книги