Делегаты и лямбда-выражения
Разберитесь в делегатах и лямбда-выражениях для создания лаконичного и гибкого кода
«Делегаты и лямбда-выражения» — бесплатный урок C# Academy на CoddyKit. Это урок 4 из 5. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 5 уроков всего.
Использование лямбда-выражений с делегатами
Использование лямбда-выражений с делегатами
Лямбда-выражения можно напрямую присваивать делегатам. Пример:

Что такое делегат
Что такое делегат?
delegate — это тип, хранящий ссылки на методы с определённой сигнатурой. Делегаты позволяют передавать методы как параметры или назначать их динамически.
Пример: Делегаты часто используются для обратных вызовов и обработки событий.
Определение и использование делегатов
Определение и использование делегатов
Вы можете определить делегат с помощью ключевого слова delegate. Пример:
Важный момент: Делегаты позволяют инкапсулировать методы.
using System;
class Program {
// Define a delegate
public delegate void PrintDelegate(string message);
static void Main() {
PrintDelegate print = PrintMessage; // Assign method to delegate
print("Hello, Delegates!"); // Call the method via the delegate
}
static void PrintMessage(string message) {
Console.WriteLine(message);
}
}
Что такое лямбда-выражение
Что такое лямбда-выражение?
Лямбда-выражение — это краткий способ представить анонимный метод в C#. Оно использует синтаксис (parameters) => expression.
Пример: (x, y) => x + y представляет метод, складывающий два числа.
Совет: Лямбда-выражения часто используются с LINQ и делегатами для краткости и ясности.
Лямбда-выражения с делегатами
Использование лямбда-выражений с делегатами
Лямбда-выражения можно напрямую присваивать делегатам. Пример:
Важный момент: Лямбда-выражения делают код более кратким и понятным.
using System;
class Program {
public delegate int MathOperation(int x, int y);
static void Main() {
MathOperation add = (x, y) => x + y; // Lambda for addition
Console.WriteLine("Result: " + add(10, 20)); // Outputs: Result: 30
}
}
Многоадресные делегаты
Многоадресные делегаты
Один делегат может ссылаться на несколько методов. Все методы вызываются по очереди. Пример:
using System;
class Program {
public delegate void Notify(string message);
static void Main() {
Notify notify = PrintMessage;
notify += LogMessage;
notify("Hello, Multicast Delegates!"); // Calls both methods
}
static void PrintMessage(string message) {
Console.WriteLine("Print: " + message);
}
static void LogMessage(string message) {
Console.WriteLine("Log: " + message);
}
}
Практическое задание
Практическое задание
Создайте программу, использующую делегат StringOperation для выполнения операций со строками, например преобразования строки в верхний регистр и её обращения. Пример:
using System;
class Program {
public delegate string StringOperation(string input);
static void Main() {
StringOperation operations = ToUpperCase;
operations += ReverseString;
string input = "Hello";
foreach (var operation in operations.GetInvocationList()) {
Console.WriteLine(((StringOperation)operation)(input));
}
}
static string ToUpperCase(string input) {
return input.ToUpper();
}
static string ReverseString(string input) {
char[] chars = input.ToCharArray();
Array.Reverse(chars);
return new string(chars);
}
}
Рекомендации по делегатам и лямбда-выражениям
Рекомендации по делегатам и лямбда-выражениям
Вот несколько рекомендаций:
- Используйте делегаты для реализации обратных вызовов и обработки событий.
- Предпочитайте лямбда-выражения для создания краткого и понятного кода.
- Сочетайте лямбда-выражения с LINQ для эффективной обработки данных.
- Избегайте чрезмерно сложных лямбда-выражений, чтобы сохранить удобочитаемость.
Совет: Используйте осмысленные имена параметров в лямбда-выражениях, чтобы повысить ясность кода.
Отличная работа!
Отличная работа!
Поздравляю! Вы научились использовать делегаты и лямбда-выражения для написания функционального кода и кода, управляемого событиями, на C#. На следующем уроке мы рассмотрим рефлексию в C# — мощную возможность для анализа типов во время выполнения. Продолжайте программировать!

Часто задаваемые вопросы
Урок «Делегаты и лямбда-выражения» бесплатный?
Да — полный текст урока «Делегаты и лямбда-выражения» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 5 уроков всего.
Чему я научусь в уроке «Делегаты и лямбда-выражения»?
Разберитесь в делегатах и лямбда-выражениях для создания лаконичного и гибкого кода Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C# Academy?
Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 5.
Сколько времени занимает урок «Делегаты и лямбда-выражения»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C# Academy?
Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Обобщения в C#
- Async и Await: работа с асинхронным кодом
- Потоки и задачи
- Делегаты и лямбда-выражения
- Рефлексия в C#