Разработка компиляторов


События


  • Событийно-ориентированный подход типичен для современных приложений (работа в сети, GUI-интерфейсы и т.д.)
  • В C# используется модель "публикация и подписка":

public delegate void EventHandler (string strText); ... evsrc.EventHandler += new EventHandler(CatchEvent);

Многие современные приложения требуют применения событийно-ориентированного подхода, например, это необходимо при создании распределенной системы, обменивающейся сообщениями, или при написании программ, использующих GUI-интерфейс. В C# используется модель "публикация/подписка" - класс публикует те события, которые он может инициировать, а другие классы могут подписаться на получение извещений о них. Для реализации этой модели используются представители (delegates) , которые выполняют в C# роль "безопасных указателей на функцию".

В следующем примере, иллюстрирующем использование представителей в C#, необходимо обратить внимание на фрагмент, в котором последовательно происходят подписка на событие, обработка события с помощью зарегистрированного обработчика и отказ от дальнейшей обработки события (см. оператор evsrc.TextOut -= EventHandler)

using System; public delegate void EventHandler (string strText); class EventSource { public event EventHandler TextOut; public void TriggerEvent() { if (TextOut != null) TextOut("Event triggered... "); } } class TestApp { public static void Main() { EventSource evsrc = new EventSource(); evsrc.TextOut += new EventHandler(CatchEvent); evsrc.TriggerEvent(); evsrc.TextOut -= new EventHandler(CatchEvent); evsrc.TriggerEvent(); TestApp theApp = new TestApp(); evsrc.TextOut += new EventHandler(theApp.InstanceCatch); evsrc.TriggerEvent(); } public static void CatchEvent(string strText) { WriteLine(strText); } public void InstanceCatch(string strText) { WriteLine("Instance "+strText); }




Начало  Назад  Вперед



Книжный магазин