Uživatelské nástroje

Nástroje pro tento web


it:sw:delegates

Delegáty a události v C#

Delegáty a události tvoří základ pro programování řízené událostmi (event-driven programming). Zatímco delegát je „ukazatel na metodu“, událost je mechanismus, který umožňuje objektu upozornit ostatní objekty, že se něco stalo.

1. Delegáty (Delegates)

Delegát je referenční typ, který definuje podpis metody (návratový typ a parametry). Jakákoli metoda, která odpovídá tomuto podpisu, může být přiřazena k danému delegátovi.

Příklad definice delegáta:

// Definice podpisu: metoda musí přijímat string a vracet void
public delegate void MujDelegat(string zprava);

public void VypisDoKonzole(string text) => Console.WriteLine(text);

// Použití
MujDelegat del = VypisDoKonzole;
del("Ahoj přes delegáta!");

2. Multicast delegáty

Delegáty mohou obsahovat odkazy na více metod najednou. Pomocí operátoru `+=` můžete přidat další metodu do „seznamu volání“. Při zavolání delegáta se pak spustí všechny metody v pořadí, v jakém byly přidány.

3. Události (Events)

Událost je zapouzdřený delegát. Používá se k implementaci vzoru Publisher-Subscriber (Vydavatel-Odběratel).

  • Publisher (Vydavatel) vyvolá událost.
  • Subscriber (Odběratel) se k události přihlásí a definuje, co se má stát, když událost nastane.

Příklad události:

public class Termostat {
    // Definice události
    public event Action<double> TeplotaZmenena;

    public void NastavTeplotu(double novaTeplota) {
        // Vyvolání události (pokud má nějaké odběratele)
        TeplotaZmenena?.Invoke(novaTeplota);
    }
}

// Odběr události
termostat.TeplotaZmenena += t => Console.WriteLine($"Teplota je: {t}");

4. Delegát vs. Událost

Vlastnost Delegát Událost
Účel Předávání metod jako parametrů. Signalizace stavu/akce jiným třídám.
Zapouzdření Může být vyvolán kýmkoliv, kdo k němu má přístup. Může být vyvolána pouze třídou, která ji definuje.
Použití Callbacky, LINQ. Uživatelské rozhraní, senzory, notifikace.

5. Standardní vzor v .NET (EventHandler)

Pro události se v .NET doporučuje používat standardní delegát `EventHandler` nebo `EventHandler<TEventArgs>`, který předává:

1. `object sender` – kdo událost vyvolal.
2. `TEventArgs e` – data o události.

Související články:

Tagy: programming dot-net csharp delegates events publisher-subscriber

it/sw/delegates.txt · Poslední úprava: autor: admin