Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
1125 of 1492 menu
◀ ▶

Мультикаст-делегат

Делегат может ссылаться на несколько методов. Оператор += добавляет метод в список вызова, -= убирает. При вызове переменной методы выполняются в порядке добавления. Так устроены цепочки обработчиков у 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,
    которую добавляют в цепочку
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить