All infos - Делегаты
22
июль

Делегаты

Пример использования делегата. В данном примере класс OperationWithDelegate делегирует операцию над входящими параметрами конструктора, внешним методам с помощью делегата.

 class Program
    {
        static void Main(string[] args)
        {
            Console.OutputEncoding = Encoding.UTF8;
            OperationWithDelegate opDelegate = new OperationWithDelegate(2,2);
            opDelegate.RegistrHandlers(WriteSum);
            opDelegate.RegistrHandlers(new HandlerClass().WriteSum);
            opDelegate.OperationDelegateInvoke();
            Console.ReadLine();
        }

        public static void WriteSum(int x, int y)
        {
            Console.WriteLine(x+y);
        }
    }

    public class HandlerClass
    {
        public void WriteSum(int x, int y)
        {
            StringBuilder str = new StringBuilder(string.Format("Сумма {0} и {1} равна ",x,y));
            str.Append(x + y);
            Console.WriteLine(str);
        }
    }

    public class OperationWithDelegate
    {
        //Объявляем делегат
        public delegate void Operation(int x, int y);
        //Создаем переменную делегата
        private Operation _op;
        private readonly int x, y;

        //Параметры для обработчиков получаем через конструктор
        public OperationWithDelegate(int x, int y)
        {
            this.x = x;
            this.y = y;
        }

        //Регистрируем делегат
        public void RegistrHandlers(Operation op)
        {
            this._op += op;
        }

        //Вызов обработчиков
        public void OperationDelegateInvoke()
        {
            _op?.Invoke(x, y);
        }
    }

 

Share this post