Групповые делегаты (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");
}
}
Вывод:
Message: Hello
Uppercase: HELLO
Удаление методов из списка вызова
Методы можно удалять с помощью оператора -=
.
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 -= PrintMessage;
del("Hello");
}
}
Вывод:
Uppercase: HELLO
Групповые делегаты и возвращаемые значения
Если методы в делегате имеют возвращаемое значение, будет получен результат только последнего вызванного метода.
delegate int MyDelegate();
class Program
{
static int FirstMethod() => 1;
static int SecondMethod() => 2;
static void Main()
{
MyDelegate del = FirstMethod;
del += SecondMethod;
int result = del();
Console.WriteLine(result);
}
}
Вывод:
2
Групповые делегаты позволяют объединять несколько методов в один вызов, что удобно для событий и многократных обработок данных.