Delegaty i zdarzenia
Poznaj sposób, w jaki delegaty i zdarzenia umożliwiają komunikację między obiektami w języku C#
Delegaty i zdarzenia to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 5 z 6. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 6 lekcji w sumie.
Delegaty i zdarzenia
Witamy w następnej lekcji! W tej lekcji dowiedzą się Państwo, czym są delegaty i zdarzenia w języku C#, do czego służą oraz jak umożliwiają programowanie sterowane zdarzeniami. Zaczynajmy!

Czym jest delegat?
delegate to typ reprezentujący odwołanie do metody. Umożliwia przekazywanie metod jako parametrów i ich dynamiczne wywoływanie.
Najważniejsze: Delegaty są niezbędne do implementowania zdarzeń i funkcji zwrotnych w języku C#.
Definiowanie i używanie delegatów
Aby zdefiniować delegat, należy użyć słowa kluczowego delegate. Przykład:
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!");
}
}
Delegaty wielokrotne
Pojedynczy delegat może wskazywać wiele metod, a wszystkie metody zostaną wywołane w kolejności. Przykład:
Wskazówka: Należy używać delegatów wielokrotnych w sytuacjach, w których trzeba wykonać wiele działań.
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
}
}
Czym jest zdarzenie?
event to mechanizm umożliwiający klasie powiadamianie innych klas lub obiektów o wystąpieniu określonego zdarzenia. Zdarzenia są oparte na delegatach.
Najważniejsze: Zdarzenia umożliwiają luźne powiązanie nadawców i subskrybentów w programowaniu sterowanym zdarzeniami.
Definiowanie i używanie zdarzeń
Aby zdefiniować zdarzenie, należy użyć słowa kluczowego event wraz z typem delegata. Przykład:
Najważniejsze: Zdarzenia umożliwiają tworzenie reaktywnych systemów sterowanych zdarzeniami.
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
}
}
Anulowanie subskrypcji zdarzeń
Subskrybenci mogą anulować subskrypcję zdarzeń za pomocą operatora -=` operator. Przykład:
Wskazówka: Należy zawsze anulować subskrypcję zdarzeń, aby uniknąć wycieków pamięci.
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
}
}
Zadanie praktyczne
Proszę utworzyć delegat CalculationDelegate do operacji arytmetycznych oraz zdarzenie OnCalculate. Następnie proszę napisać program, który wywołuje zdarzenie i wykonuje obliczenia. Przykład:
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
}
}
Świetna robota!
Gratulacje! Nauczyli się Państwo, jak używać delegatów i zdarzeń do tworzenia dynamicznych programów sterowanych zdarzeniami. W następnej lekcji poznają Państwo pracę z kolekcjami, takimi jak listy, słowniki i kolejki. Kontynuujmy kodowanie!

Ucz się C# dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 93
- Lekcje
- 346
Często zadawane pytania
Czy lekcja „Delegaty i zdarzenia” jest bezpłatna?
Tak — pełny tekst „Delegaty i zdarzenia” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 6 lekcji w sumie.
Co nauczysz się w „Delegaty i zdarzenia”?
Poznaj sposób, w jaki delegaty i zdarzenia umożliwiają komunikację między obiektami w języku C# Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C# Academy?
Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 5 z 6.
Ile czasu zajmuje lekcja „Delegaty i zdarzenia”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?
Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Wprowadzenie do interfejsów
- Klasy abstrakcyjne
- Elementy i metody statyczne
- Poznawanie wyliczeń i struktur
- Delegaty i zdarzenia
- Kolekcje w C#: listy, słowniki i kolejki