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().
Применение аксессоров событий