Делегаты
Пример использования делегата. В данном примере класс 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); } }