- Делегат — це тип, який представляє посилання на методи з конкретним списком параметрів
- При створенні екземпляра делегата – цей екземпляр можна пов'язати з будь-яким методом
- Лямбда-вирази є більш зручними
- Анонімний метод
Thread thread = new Thread( delegate(){ F1(a); } // () => { F1(a); } ); Приклад 1 delegate int IntOperation(int i, int j); public class MyClass { public static int Sum(int x, int y) { return x + y; } public static int Prz(int x, int y) { return x * y; } public static int Del(int x, int y) { return x / y; } } class Program { static void Main(string[] args) { // Ініціалізуємо делегат IntOperation op1 = MyClass.Sum; int result = op1(5, 10); Console.WriteLine("Сума: " + result); op1 = MyClass.Prz; result = op1(5, 10); Console.WriteLine("Добуток: " + result); Console.ReadLine(); } } Приклад 2 public delegate void Print(int value); static void Main(string[] args) { Print printDel = PrintNumber; // Print printDel = new Print(PrintNumber); printDel(200); printDel = PrintMoney; printDel(200); Console.ReadKey(); } public static void PrintNumber(int num) { Console.WriteLine("Number: {0}", num); } public static void PrintMoney(int money) { Console.WriteLine("Money: {0} $", money); } Number: 200 Money: 200 $ Приклад 3 delegate void HELLO(); static void Main(string[] args) { HELLO HW = delegate { Console.WriteLine("Hello Ukraine!"); }; HW(); HW.Invoke(); Console.ReadKey(); } Можна визвати зразу кілька методів delegate void MyDelegate(); static void Main(string[] args) { var cars = F1; // new MyDelegate(F1) cars += F2; cars += F3; cars.Invoke(); // або cars(); } Запуск додаткової функції при події button1.Click += new EventHandler(this.My_Click); // WinForm button1.Click += new RoutedEventHandler(this.My_Click); //WPF