0Pricing
C# Academy · Урок

Делегаты и события

Узнайте, как делегаты и события обеспечивают взаимодействие между объектами в C#

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

Делегаты и события

Делегаты и события

Добро пожаловать на следующий урок! На этом уроке вы узнаете о делегатах и событиях в C#, их назначении и о том, как они обеспечивают программирование, управляемое событиями. Давайте начнём!

Делегаты и события — иллюстрация 1

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

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

delegate — это тип, представляющий ссылку на метод. Он позволяет передавать методы в качестве параметров и вызывать их динамически.

Ключевой момент: Делегаты необходимы для реализации событий и функций обратного вызова в C#.

Определение и использование делегатов

Определение и использование делегатов

Чтобы определить делегат, используйте ключевое слово delegate. Пример:

using System;

class Program {
    // Define a delegate
    public delegate void MessageDelegate(string message);

    static void DisplayMessage(string message) {
        Console.WriteLine(message);
    }

    static void Main() {
        // Create a delegate instance
        MessageDelegate msg = DisplayMessage;

        // Invoke the delegate
        msg("Hello, Delegates!");
    }
}

Многоадресные делегаты

Многоадресные делегаты

Один делегат может указывать на несколько методов, и все методы будут вызываться по порядку. Пример:

Совет: Используйте многоадресные делегаты в ситуациях, когда необходимо выполнить несколько действий.

using System;

class Program {
    public delegate void MessageDelegate(string message);

    static void ShowMessage(string message) {
        Console.WriteLine("Message: " + message);
    }

    static void LogMessage(string message) {
        Console.WriteLine("Log: " + message);
    }

    static void Main() {
        MessageDelegate msg = ShowMessage;
        msg += LogMessage; // Add another method

        msg("Hello, Multicast Delegates!"); // Both methods are invoked
    }
}

Что такое событие?

Что такое событие?

Событие — это механизм, позволяющий классу уведомлять другие классы или объекты о возникновении чего-либо важного. События создаются на основе делегатов.

Ключевой момент: События обеспечивают слабую связанность между издателями и подписчиками в программировании, управляемом событиями.

Определение и использование событий

Определение и использование событий

Чтобы определить событие, используйте ключевое слово event с типом делегата. Пример:

Ключевой момент: События позволяют создавать реактивные системы и системы, управляемые событиями.

using System;

class Publisher {
    public delegate void NotifyDelegate(string message);
    public event NotifyDelegate Notify; // Define an event

    public void RaiseEvent(string message) {
        Notify?.Invoke(message); // Invoke the event
    }
}

class Subscriber {
    public void OnNotify(string message) {
        Console.WriteLine("Subscriber received: " + message);
    }
}

class Program {
    static void Main() {
        Publisher pub = new Publisher();
        Subscriber sub = new Subscriber();

        pub.Notify += sub.OnNotify; // Subscribe to the event
        pub.RaiseEvent("Hello, Events!"); // Raise the event
    }
}

Отмена подписки на события

Отмена подписки на события

Подписчики могут отменить подписку на события с помощью -=` operator. Example:

Совет: Всегда отменяйте подписку на события, чтобы избежать утечек памяти.

using System;

class Publisher {
    public delegate void NotifyDelegate(string message);
    public event NotifyDelegate Notify;

    public void RaiseEvent(string message) {
        Notify?.Invoke(message);
    }
}

class Subscriber {
    public void OnNotify(string message) {
        Console.WriteLine("Subscriber received: " + message);
    }
}

class Program {
    static void Main() {
        Publisher pub = new Publisher();
        Subscriber sub = new Subscriber();

        pub.Notify += sub.OnNotify; // Subscribe
        pub.RaiseEvent("First Message");

        pub.Notify -= sub.OnNotify; // Unsubscribe
        pub.RaiseEvent("Second Message"); // No output, as subscriber is removed
    }
}

Практическое задание

Практическое задание

Создайте делегат CalculationDelegate для арифметических операций и событие OnCalculate. Напишите программу, которая вызывает событие и выполняет вычисления. Пример:

using System;

class Calculator {
    public delegate void CalculationDelegate(double result);
    public event CalculationDelegate OnCalculate;

    public void Add(double a, double b) {
        double result = a + b;
        OnCalculate?.Invoke(result);
    }
}

class Program {
    static void Main() {
        Calculator calc = new Calculator();

        // Subscribe to the event
        calc.OnCalculate += result => Console.WriteLine("Result: " + result);

        calc.Add(5, 3); // Outputs: Result: 8
    }
}

Отличная работа!

Отличная работа!

Поздравляем! Вы научились использовать делегаты и события для создания динамических программ и программ, управляемых событиями. На следующем уроке мы рассмотрим работу с коллекциями, такими как списки, словари и очереди. Продолжайте программировать!

Делегаты и события — иллюстрация 10

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

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

Да — полный текст урока «Делегаты и события» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 6 уроков всего.

Чему я научусь в уроке «Делегаты и события»?

Узнайте, как делегаты и события обеспечивают взаимодействие между объектами в C# Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C# Academy?

Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 5 из 6.

Сколько времени занимает урок «Делегаты и события»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C# Academy?

Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

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

  1. Введение в интерфейсы
  2. Абстрактные классы
  3. Статические члены и методы
  4. Перечисления и структуры
  5. Делегаты и события
  6. Коллекции в C#: списки, словари и очереди
← Назад к C# Academy