0Pricing
C# Academy · Урок

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

Разберитесь в делегатах и лямбда-выражениях для создания лаконичного и гибкого кода

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

Использование лямбда-выражений с делегатами

Использование лямбда-выражений с делегатами

Лямбда-выражения можно напрямую присваивать делегатам. Пример:

Делегаты и лямбда-выражения — иллюстрация 1

Что такое делегат

Что такое делегат?

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# — мощную возможность для анализа типов во время выполнения. Продолжайте программировать!

Делегаты и лямбда-выражения — иллюстрация 10

Часто задаваемые вопросы

Урок «Делегаты и лямбда-выражения» бесплатный?

Да — полный текст урока «Делегаты и лямбда-выражения» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 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 — локальная установка не требуется.

Все уроки этого курса

  1. Обобщения в C#
  2. Async и Await: работа с асинхронным кодом
  3. Потоки и задачи
  4. Делегаты и лямбда-выражения
  5. Рефлексия в C#
← Назад к C# Academy