делегат и лямбда выражение

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

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

Показать

Копировать
  Main.cs  
  • using System;
  •  
  • public delegate int dlgSum(int arg0, int arg1);
  • public delegate void dlgMessage(string arg);
  • public delegate void dlgTextShow();
  •  
  • //обратите ВНИМАНИЕ, класс вообще ОТСУТСТВУЕТ
  •  
  • class Program {
  •  public static int Main() {
  •  
  •   //создание анонимного метода
  •   //ВНИМАНИЕ! в конце метода ставится точка с запятой
  •   //1 вариант
  •   dlgSum dS1 = (int arg0, int arg1) => {
  •    return (arg0 + arg1);
  •   };
  •   //2 вариант
  •   dlgSum dS2 = (int arg0, int arg1) => (arg0 + arg1);
  •   //3 вариант
  •   dlgSum dS3 = (int arg0, int arg1) => arg0 + arg1;
  •  
  •   //реализация объекта делегата
  •   //обратите ВНИМАНИЕ, к объекту делегата добавляются круглые скобки, как у метода
  •   Console.WriteLine(dS1(10, 20));
  •  
  •   //обратите ВНИМАНИЕ, если метод имеет один параметр,
  •   //то его не обязательно брать в круглые скобки
  •   dlgMessage dM = arg => Console.WriteLine(arg);
  •   dM("Hello World!");
  •    
  •   //обратите ВНИМАНИЕ, если метод не имеет параметров
  •   dlgTextShow dTS = () => Console.WriteLine("Привет Мир!");
  •   dTS();
  •    
  •   Console.ReadKey();
  •   return 0;
  •  }
  • }
30
Hello World!
Привет Мир!