Lekce 15: Delegáti a události – Asynchronní a dynamická správa akcí v C#

Lekce 15: Delegáti a události – Asynchronní a dynamická správa akcí v C#

Delegáti a události jsou klíčovými prvky jazyka C#, které umožňují vytvářet flexibilní, dynamické a modulární aplikace. Tyto koncepty jsou úzce spjaty s návrhovými vzory a umožňují efektivní správu asynchronních operací a dynamické přidávání funkcionality. V této lekci se naučíte, co jsou delegáti a události, jak fungují a jak je využít pro vytváření robustních aplikací.


1. Co je delegát?

Delegát je typ, který uchovává odkaz na metodu nebo seznam metod, které lze vyvolat. Je to podobné jako ukazatel na funkci v jiných jazycích, ale delegát je bezpečný pro typy a podporuje více metod.

Deklarace delegáta

public delegate void MojeAkce(string zprava);

Delegát je deklarován pomocí klíčového slova delegate. Syntaxe zahrnuje návratový typ a podpis metod, které může delegát uchovávat.

Tento delegát může uchovávat metody, které přijímají jeden parametr typu string a vracejí void.


Použití delegáta

Příklad:

using System;

class Program
{
    // Definice delegáta
    public delegate void MojeAkce(string zprava);

    // Metoda odpovídající delegátu
    public static void VytiskniZpravu(string zprava)
    {
        Console.WriteLine($"Zpráva: {zprava}");
    }

    static void Main()
    {
        // Vytvoření instance delegáta
        MojeAkce akce = VytiskniZpravu;

        // Volání delegáta
        akce("Ahoj, světe!");
    }
}

Výstup:

Zpráva: Ahoj, světe!

V tomto příkladu delegát MojeAkce odkazuje na metodu VytiskniZpravu, která se následně vyvolá.


2. Multicast delegáti

Delegáti v C# mohou uchovávat více metod. K tomu slouží multicast delegáti, které umožňují přidávat metody pomocí operátoru +=.

Příklad:

public static void DruhaZprava(string zprava)
{
    Console.WriteLine($"Další zpráva: {zprava.ToUpper()}");
}

static void Main()
{
    MojeAkce akce = VytiskniZpravu;
    akce += DruhaZprava;

    // Delegát vyvolá obě metody
    akce("Ahoj, světe!");
}

Výstup:

Zpráva: Ahoj, světe!
Další zpráva: AHOJ, SVĚTE!

3. Události v C#

Události jsou mechanismus, který umožňuje objektům komunikovat, aniž by si byly přímo vědomy své existence. Události jsou založeny na delegátech a umožňují dynamickou správu akcí, například v reakci na uživatelské interakce.

Deklarace události

Události se deklarují pomocí klíčového slova event.

Příklad:

using System;

class Program
{
    // Definice delegáta
    public delegate void ZmenaHodnotyHandler(string zprava);

    // Deklarace události
    public static event ZmenaHodnotyHandler ZmenaHodnoty;

    static void Main()
    {
        // Přiřazení metody k události
        ZmenaHodnoty += VytiskniZpravu;

        // Vyvolání události
        ZmenaHodnoty?.Invoke("Hodnota byla změněna!");
    }
}

Výstup:

Zpráva: Hodnota byla změněna!

V tomto příkladu je událost ZmenaHodnoty vyvolána metodou Invoke, což způsobí zavolání přidružené metody.


4. Použití delegátů a událostí v praxi

Asynchronní zpracování pomocí delegátů

Delegáti mohou být použiti k definování úloh, které budou spuštěny asynchronně.

Příklad:

using System;
using System.Threading;

public class Program
{
    public delegate void AsynchronniAkce();

    public static void DlouhaOperace()
    {
        Console.WriteLine("Začínám dlouhou operaci...");
        Thread.Sleep(3000); // Simulace dlouhé operace
        Console.WriteLine("Dlouhá operace dokončena.");
    }

    static void Main()
    {
        AsynchronniAkce akce = DlouhaOperace;

        // Spuštění asynchronní úlohy
        akce.BeginInvoke(null, null);
        Console.WriteLine("Pokračuji v hlavním vláknu...");
    }
}

Výstup:

Pokračuji v hlavním vláknu...
Začínám dlouhou operaci...
Dlouhá operace dokončena.

5. Události v uživatelském rozhraní

Události jsou klíčové při práci s uživatelským rozhraním (např. tlačítka, vstupní pole). Příklad níže ukazuje použití události při stisknutí tlačítka v konzolové aplikaci:

using System;

class Program
{
    public delegate void KlikHandler(string zprava);
    public static event KlikHandler NaKliknuti;

    static void Main()
    {
        // Přiřazení metody k události
        NaKliknuti += VytiskniZpravu;

        Console.WriteLine("Stiskněte Enter pro vyvolání události.");
        Console.ReadLine();

        // Vyvolání události
        NaKliknuti?.Invoke("Tlačítko bylo stisknuto.");
    }
}

Výstup:

Stiskněte Enter pro vyvolání události.
Zpráva: Tlačítko bylo stisknuto.

6. Výhody delegátů a událostí

  • Modularita: Kód lze snadno rozdělit na menší části, které spolu komunikují pomocí událostí.
  • Dynamické akce: Umožňují přidávání a odebírání metod za běhu programu.
  • Snadná správa: Zvyšují čitelnost a udržovatelnost kódu.

Závěr

Delegáti a události jsou nepostradatelné nástroje pro vývoj moderních aplikací v C#. Delegáti umožňují dynamické volání metod, zatímco události usnadňují komunikaci mezi objekty. Pochopení těchto konceptů vám umožní vytvářet robustní a efektivní aplikace, které snadno reagují na změny a uživatelské interakce.

Jirka

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

We use cookies to personalise content and ads, to provide social media features and to analyse our traffic. We also share information about your use of our site with our social media, advertising and analytics partners. View more
Cookies settings
Accept
Privacy & Cookie policy
Privacy & Cookies policy
Cookie name Active

Kdo jsme

Naše webová adresa je: https://www.jefta.cz.

Komentáře

Když návštěvníci zanechají na webu komentáře, shromažďujeme údaje zobrazené ve formuláři pro komentáře a také IP adresu návštěvníka a řetězec uživatelského agenta prohlížeče, abychom pomohli odhalit spam.

Anonymizovaný řetězec vytvořený z vaší e-mailové adresy (také nazývaný hash) může být poskytnut službě Gravatar, abyste zjistili, zda ji používáte. Zásady ochrany osobních údajů služby Gravatar jsou k dispozici zde: https://automattic.com/privacy/. Po schválení vašeho komentáře bude váš profilový obrázek viditelný pro veřejnost v kontextu vašeho komentáře.

Média

Pokud na web nahráváte obrázky, měli byste se vyhnout nahrávání obrázků s vloženými údaji o poloze (EXIF GPS). Návštěvníci webu si mohou stáhnout a extrahovat jakákoli data o poloze z obrázků na webu.

Soubory cookie

Pokud na našem webu zanecháte komentář, můžete se přihlásit k ukládání svého jména, e-mailové adresy a webu do souborů cookie. Jsou pro vaše pohodlí, abyste nemuseli znovu vyplňovat své údaje, když zanecháte další komentář. Tyto cookies vydrží jeden rok.

Pokud navštívíte naši přihlašovací stránku, nastavíme dočasný soubor cookie, abychom zjistili, zda váš prohlížeč přijímá soubory cookie. Tento soubor cookie neobsahuje žádné osobní údaje a po zavření prohlížeče je vyřazen.

Když se přihlásíte, nastavíme také několik souborů cookie pro uložení vašich přihlašovacích údajů a vašich voleb zobrazení obrazovky. Přihlašovací soubory cookie vydrží dva dny a soubory cookie možností obrazovky vydrží rok. Pokud zvolíte "Zapamatovat si mě", vaše přihlášení bude trvat dva týdny. Pokud se odhlásíte ze svého účtu, přihlašovací soubory cookie budou odstraněny.

Pokud upravíte nebo publikujete článek, uloží se do vašeho prohlížeče další cookie. Tento soubor cookie neobsahuje žádné osobní údaje a pouze označuje ID příspěvku článku, který jste právě upravili. Jeho platnost vyprší po 1 dni.

Vložený obsah z jiných webových stránek

Články na tomto webu mohou obsahovat vložený obsah (např. videa, obrázky, články atd.). Vložený obsah z jiných webových stránek se chová úplně stejně, jako kdyby návštěvník navštívil jinou webovou stránku.

Tyto webové stránky mohou shromažďovat údaje o vás, používat soubory cookie, vkládat další sledování třetích stran a monitorovat vaši interakci s tímto vloženým obsahem, včetně sledování vaší interakce s vloženým obsahem, pokud máte účet a jste na dané webové stránce přihlášeni.

S kým sdílíme vaše údaje

Pokud požádáte o resetování hesla, vaše IP adresa bude zahrnuta v e-mailu pro resetování.

Jak dlouho vaše údaje uchováváme

Pokud zanecháte komentář, bude komentář a jeho metadata uchována po neomezenou dobu. Je to proto, abychom mohli rozpoznat a schválit jakékoli následné komentáře automaticky, místo abychom je drželi ve frontě na moderování.

Pro uživatele, kteří se zaregistrují na našich webových stránkách (pokud existují), ukládáme také osobní údaje, které poskytují, v jejich uživatelském profilu. Všichni uživatelé mohou kdykoli zobrazit, upravit nebo smazat své osobní údaje (kromě toho, že nemohou změnit své uživatelské jméno). Správci webových stránek mohou tyto informace také zobrazit a upravovat.

Jaká práva máte nad svými údaji

Pokud máte účet na této stránce nebo jste zanechali komentáře, můžete požádat o zaslání exportovaného souboru osobních údajů, které o vás uchováváme, včetně všech údajů, které jste nám poskytli. Můžete také požádat, abychom vymazali veškeré osobní údaje, které o vás uchováváme. To nezahrnuje žádné údaje, které jsme povinni uchovávat pro administrativní, právní nebo bezpečnostní účely.

Kam se posílají vaše data

Komentáře návštěvníků mohou být kontrolovány prostřednictvím služby automatické detekce spamu.

Save settings
Cookies settings