Вывод в обратном порядке цепочки обработчиков событий - C#

Узнай цену своей работы

Формулировка задачи:

В методе Main происходит добавление, удаление методов в цепочке обработчиков событий. На последнем этапе получаем цепочку, с удаленным X и добавленным Z. Собственно вопрос, как вывести данную цепочку в обратной последовательности
Листинг программы
  1. namespace ConsoleApplication1
  2. {
  3. delegate void MyEventHandler();
  4. class MyEvent
  5. {
  6. public event MyEventHandler activate;
  7. public void ActEventMet()
  8. {
  9. if (activate != null)
  10. activate();
  11. }
  12. }
  13. class X
  14. {
  15. public void XHandler()
  16. {
  17. Console.WriteLine("Обработка объектом класса X");
  18. }
  19. }
  20. class Y
  21. {
  22. public void YHandler()
  23. {
  24. Console.WriteLine("Обработка объектом класса Y");
  25. }
  26. }
  27. class Z
  28. {
  29. public void ZHandler()
  30. {
  31. Console.WriteLine("Обработка объектом класса Z");
  32. }
  33. }
  34. class Test_Event
  35. {
  36. static void handler()
  37. {
  38. Console.WriteLine("Обработка объектом класса Test_Event");
  39. }
  40. public static void Main(string[] args)
  41. {
  42. MyEvent ev_obj = new MyEvent();
  43. X x_obj = new X();
  44. Y y_obj = new Y();
  45. Z z_obj = new Z();
  46. Console.WriteLine("1 (первоначальный результат)");
  47. ev_obj.activate += new MyEventHandler(handler);
  48. ev_obj.activate += new MyEventHandler(x_obj.XHandler);
  49. ev_obj.activate += new MyEventHandler(y_obj.YHandler);
  50. ev_obj.ActEventMet();
  51. Console.WriteLine("\n2 (удаление X)");
  52. ev_obj.activate -= new MyEventHandler(x_obj.XHandler);
  53. ev_obj.ActEventMet();
  54. Console.WriteLine("\n3 (добавление Z)");
  55. ev_obj.activate += new MyEventHandler(z_obj.ZHandler);
  56. ev_obj.ActEventMet();
  57. Console.WriteLine("\n4 (обратный порядок)");
  58. // необходимо сделать
  59. Console.ReadKey();
  60. }
  61. }
  62. }

Решение задачи: «Вывод в обратном порядке цепочки обработчиков событий»

textual
Листинг программы
  1.     class MyEvent
  2.     {
  3.         public event MyEventHandler activate;
  4.  
  5.         public void ActEventMet()
  6.         {
  7.             if (activate != null)
  8.                 activate();
  9.         }
  10.         public void ActEventMetReverse()
  11.         {
  12.             var activator = activate;
  13.             if (activator == null) return;
  14.  
  15.             var handlers = activator.GetInvocationList();
  16.             for (int i = handlers .Length - 1; i >= 0; i--)
  17.                handlers[i].DynamicInvoke();
  18.         }
  19.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.917 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы