Делегаты (delegate
) — это типы, которые представляют собой указатели на методы. Они позволяют передавать методы в качестве параметров, вызывать их динамически и использовать для обработки событий.
Объявление и использование делегатов
Делегат объявляется с указанием возвращаемого типа и списка параметров, аналогично сигнатуре метода.
delegate void MyDelegate(string message);
class Program
{
static void PrintMessage(string message)
{
Console.WriteLine(message);
}
static void Main()
{
MyDelegate del = PrintMessage;
del("Hello, world!");
}
}
Групповые делегаты (Multicast Delegates)
Делегаты могут хранить ссылки на несколько методов, объединяя их в список вызова.
delegate void MyDelegate(string message);
class Program
{
static void PrintMessage(string message) => Console.WriteLine($"Message: {message}");
static void PrintUpperMessage(string message) => Console.WriteLine($"Uppercase: {message.ToUpper()}");
static void Main()
{
MyDelegate del = PrintMessage;
del += PrintUpperMessage;
del("Hello");
}
}
Делегаты и анонимные методы
Анонимные методы позволяют создавать методы без явного объявления.
delegate void MyDelegate(string message);
class Program
{
static void Main()
{
MyDelegate del = delegate (string msg)
{
Console.WriteLine($"Anonymous: {msg}");
};
del("Hello");
}
}
Лямбда-выражения
Лямбда-выражения упрощают объявление анонимных методов.
delegate int MathOperation(int a, int b);
class Program
{
static void Main()
{
MathOperation add = (a, b) => a + b;
Console.WriteLine(add(5, 3));
}
}
Делегаты и события
Делегаты часто используются для обработки событий.
using System;
class EventExample
{
public delegate void Notify();
public event Notify OnNotify;
public void TriggerEvent()
{
OnNotify?.Invoke();
}
}
class Program
{
static void Main()
{
EventExample obj = new EventExample();
obj.OnNotify += () => Console.WriteLine("Event triggered!");
obj.TriggerEvent();
}
}
Делегаты обеспечивают гибкость работы с методами, позволяя создавать более модульный и расширяемый код.