RU CSharp Delegates Lambdas - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Делегаты, лямбды и замыкания

Руководство C# · Примеры UO

Делегат хранит вызываемую функцию определённой сигнатуры. Action не возвращает результат, Func возвращает его, Predicate<T> возвращает bool. Лямбда записывается как arguments => expression или блок. Захваченная переменная принадлежит замыканию, поэтому изменение её значения влияет на последующие вызовы.

Простой пример (Example.cs)

Сохраните этот пример отдельно как Example.cs. Запускайте его независимо от остальных примеров страницы.

Example.cs:

// PROJECT-EXAMPLE
System.Func<int, int> twice = value => value * 2;
System.Console.WriteLine(twice(4));

Результат:

8
Func<int, int, int> add = (left, right) => left + right;
Action<string> report = text => UO.Print(text);
report($"Total={add(2, 3)}");
int count = 0;
Action next = () => count++;
next();
next();
UO.Print($"Count={count}");

Метод можно передать как method group, когда его сигнатура соответствует делегату. static-лямбда не захватывает локальный контекст. Для возвращающей задачу лямбды используйте Func<Task> или Func<T,Task> и ожидайте задачу; async void оставляют обработчикам событий, требующим void.

Официальная документация: Делегаты, лямбды и замыкания — Microsoft Learn.

⚠️ **GitHub.com Fallback** ⚠️