Делегати
1. Об'єкт, що вказує на метод і дає можливість визвати цей метод
2. Анонімний метод
3. Лямбда-вирази є більш зручними
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