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 typuTResult. Môže prijímať od 0 do 16 parametrov rôznych typov.Predicate<T>: Delegát, ktorý prijíma jeden parameter typuTa 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.