Вывод в обратном порядке цепочки обработчиков событий - 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();
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д