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

Что такое делегат?
Что такое делегат?
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
}
}
Отличная работа!
Отличная работа!
Поздравляем! Вы научились использовать делегаты и события для создания динамических программ и программ, управляемых событиями. На следующем уроке мы рассмотрим работу с коллекциями, такими как списки, словари и очереди. Продолжайте программировать!

Часто задаваемые вопросы
Урок «Делегаты и события» бесплатный?
Да — полный текст урока «Делегаты и события» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 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 — локальная установка не требуется.
Все уроки этого курса
- Введение в интерфейсы
- Абстрактные классы
- Статические члены и методы
- Перечисления и структуры
- Делегаты и события
- Коллекции в C#: списки, словари и очереди