C# Academy · Lekcja

Delegaty i zdarzenia

Poznaj sposób, w jaki delegaty i zdarzenia umożliwiają komunikację między obiektami w języku C#

Lekcja 5 z 610 kroki

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!

Delegaty i zdarzenia — ilustracja 1

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!

Delegaty i zdarzenia — ilustracja 10
Bezpłatny start

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

  1. Wprowadzenie do interfejsów
  2. Klasy abstrakcyjne
  3. Elementy i metody statyczne
  4. Poznawanie wyliczeń i struktur
  5. Delegaty i zdarzenia
  6. Kolekcje w C#: listy, słowniki i kolejki
← Powrót do C# Academy