многоадресная передача

Делегат — это тип ссылки, который хранит данные о сигнатуре метода.
Делегат — это объект, который ссылается на метод.
Объект делегата может вызывать разные методы во время выполнения, а не во время компиляции.

Синтаксис:
[атрибут] модификатор_доступа delegate тип имя_делегата ([список_параметров]);
Многоадресная передача — это способность создавать список вызовов методов, которые должны автоматически вызываться при вызове делегата.
Создается экземпляр делегата, а затем для добавления методов в эту цепочку используется оператор "+=", а для удаления из цепочки вызовов используется оператор "-=".
Делегат многоадресной передачи имеет одно ограничение — он должен возвращать тип void.
Скрыть

Показать

Копировать
  Main.cs  
  • using System;
  •  
  • //для многоадресной передачи делегат должен иметь тип void
  • public delegate void dlgMessage();
  •  
  • //обратите ВНИМАНИЕ, класс вообще отсутствует
  •  
  • class Program {
  •  public static int Main() {
  •  
  •   dlgMessage dM0 = null;
  •   dlgMessage dM1 = () => Console.Write("New York");
  •   dlgMessage dM2 = () => Console.Write(" is");
  •   dlgMessage dM3 = () => Console.Write(" a");
  •   dlgMessage dM4 = () => Console.Write(" big");
  •   dlgMessage dM5 = () => Console.Write(" city");
  •   //помещаем объекты в массив
  •   dlgMessage[] arra = new dlgMessage[] {dM1, dM2, dM3, dM4, dM5};
  •   for(int i=0; i<arra.Length; i++) {
  •    //добавление в цепочку вызова делегатов
  •    dM0 += arra[i];
  •   }
  •   dM0();
  •   Console.WriteLine();
  •   Console.WriteLine();
  •   //удаление из цепочки вызова делегата вручную
  •   dM0 -= dM5;
  •   dM0();
  •   Console.WriteLine();
  •   dM0 -= dM4;
  •   dM0();
  •   Console.WriteLine();
  •   dM0 -= dM3;
  •   dM0();
  •   Console.WriteLine();
  •   dM0 -= dM2;
  •   dM0();
  •   Console.WriteLine();
  •   Console.ReadKey();
  •   return 0;
  •  }
  • }
New York is a big city

New York is a big
New York is a
New York is
New York