Мультикаст-делегат
Делегат может ссылаться на несколько методов.
Оператор += добавляет метод в список вызова,
-= убирает. При вызове переменной методы
выполняются в порядке добавления. Так устроены
цепочки обработчиков у event.
Синтаксис
Action<string> chain = First;
chain += Second;
chain("abcde");
Пример
Давайте подпишем два метода через +=:
using System;
class Program
{
static void First(string text)
{
Console.WriteLine("first");
}
static void Second(string text)
{
Console.WriteLine("second");
}
static void Main()
{
Action<string> chain = First;
chain += Second;
chain("abcde");
}
}
Результат выполнения кода:
"first"
"second"
Пример
Давайте объединим три обработчика в одном делегате:
using System;
class Program
{
static void Step1() { Console.WriteLine(1); }
static void Step2() { Console.WriteLine(2); }
static void Step3() { Console.WriteLine(3); }
static void Main()
{
Action flow = Step1;
flow += Step2;
flow += Step3;
flow();
}
}
Результат выполнения кода:
1
2
3
Пример
Давайте снимем один метод через -=:
using System;
class Program
{
static void First(string text)
{
Console.WriteLine("first");
}
static void Second(string text)
{
Console.WriteLine("second");
}
static void Main()
{
Action<string> chain = First;
chain += Second;
chain -= First;
chain("12345");
}
}
Результат выполнения кода:
"second"
Смотрите также
-
тип
delegate,
который тоже поддерживает мультикаст -
класс
Action,
который часто объединяют через += -
ключевое слово
event,
где несколько подписчиков - норма -
группа методов
method group,
которую добавляют в цепочку