Вывод в обратном порядке цепочки обработчиков событий - 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();
        }
    }

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


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

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

12   голосов , оценка 3.917 из 5
Похожие ответы