Sobes.tech
Junior

Čo je to delegát v C#?

sobes.tech AI

Odpoveď od AI

Delegát je odkazový typ, ktorý je deklarovaný pomocou kľúčového slova delegate. Inakšie, on inkapsuluje metódu s určitým podpisom (typ návratovej hodnoty a typy parametrov). V podstate, delegát je typovo bezpečný ukazovateľ na metódu.

Hlavné vlastnosti delegátov:

  • Inkapulácia metód: Delegát uchováva informácie o metóde, na ktorú odkazuje.
  • Typová bezpečnosť: Delegát môže odkazovať iba na tie metódy, ktorých podpis presne zodpovedá podpisu delegáta.
  • Multicast: Delegáty môžu odkazovať na niekoľko metód súčasne. Pri volaní delegáta sú volané všetky s ním spojené metódy v poradí ich pridania.

Príklad deklarácie a použitia:

// Deklarácia delegáta
public delegate int MyDelegate(int x, int y);

// Metóda, ktorá zodpovedá podpisu delegáta
public class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }
}

// Použitie delegáta
public class Program
{
    public static void Main(string[] args)
    {
        Calculator calc = new Calculator();

        // Vytvorenie inštancie delegáta a spojenie s metódou Add
        MyDelegate del = new MyDelegate(calc.Add);

        // Volanie metódy cez delegáta
        int result = del(5, 3);
        System.Console.WriteLine(result); // Výstup: 8
    }
}

S príchodom .NET Framework 3.5 a LINQ sa široko rozšírili vestavné generické delegáty:

  • Action<T1, ..., Tn>: Delegát, ktorý nevracia hodnotu (void). Môže prijímať od 0 do 16 parametrov rôznych typov.
  • Func<T1, ..., Tn, TResult>: Delegát, ktorý vracia hodnotu typu TResult. Môže prijímať od 0 do 16 parametrov rôznych typov.
  • Predicate<T>: Delegát, ktorý prijíma jeden parameter typu T a vracia boolean. Používa sa na kontrolu podmienky.

Tabuľka porovnania vestavných delegátov:

Delegát Vrátená hodnota Parametre Príklad použitia
Action void 0..16 parametrov Vykonanie akcie bez návratovej hodnoty
Func<TResult> TResult 0 parametrov + návratová hodnota TResult Výpočet bez vstupných dát
Func<T, TResult> TResult 1 parameter typu T + návratová hodnota TResult Prevod hodnoty
Predicate<T> bool 1 parameter typu T Kontrola podmienky

Delegáty sú široko používané pri spracovaní udalostí, asynchrónnych operáciách, LINQ a na implementáciu callbackov.