Вывод в обратном порядке цепочки обработчиков событий - C#
Формулировка задачи:
В методе Main происходит добавление, удаление методов в цепочке обработчиков событий.
На последнем этапе получаем цепочку, с удаленным X и добавленным Z.
Собственно вопрос, как вывести данную цепочку в обратной последовательности
namespace ConsoleApplication1 { delegate void MyEventHandler(); class MyEvent { public event MyEventHandler activate; public void ActEventMet() { if (activate != null) activate(); } } class X { public void XHandler() { Console.WriteLine("Обработка объектом класса X"); } } class Y { public void YHandler() { Console.WriteLine("Обработка объектом класса Y"); } } class Z { public void ZHandler() { Console.WriteLine("Обработка объектом класса Z"); } } class Test_Event { static void handler() { Console.WriteLine("Обработка объектом класса Test_Event"); } public static void Main(string[] args) { MyEvent ev_obj = new MyEvent(); X x_obj = new X(); Y y_obj = new Y(); Z z_obj = new Z(); Console.WriteLine("1 (первоначальный результат)"); ev_obj.activate += new MyEventHandler(handler); ev_obj.activate += new MyEventHandler(x_obj.XHandler); ev_obj.activate += new MyEventHandler(y_obj.YHandler); ev_obj.ActEventMet(); Console.WriteLine("\n2 (удаление X)"); ev_obj.activate -= new MyEventHandler(x_obj.XHandler); ev_obj.ActEventMet(); Console.WriteLine("\n3 (добавление Z)"); ev_obj.activate += new MyEventHandler(z_obj.ZHandler); ev_obj.ActEventMet(); Console.WriteLine("\n4 (обратный порядок)"); // необходимо сделать Console.ReadKey(); } } }
Решение задачи: «Вывод в обратном порядке цепочки обработчиков событий»
textual
Листинг программы
class MyEvent { public event MyEventHandler activate; public void ActEventMet() { if (activate != null) activate(); } public void ActEventMetReverse() { var activator = activate; if (activator == null) return; var handlers = activator.GetInvocationList(); for (int i = handlers .Length - 1; i >= 0; i--) handlers[i].DynamicInvoke(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д