Junior
Ce este un delegat în C#?
sobes.tech AI
Răspuns de la AI
Un delegat este un tip de referință declarat cu cuvântul cheie delegate. Encapsulează o metodă cu o semnătură specifică (tipul de returnare și tipurile de parametri). În esență, un delegat este un pointer sigur la metodă.
Proprietățile principale ale delegaților:
- Încapsularea metodelor: Delegatul stochează informații despre metoda la care face referire.
- Siguranța tipurilor: Delegatul poate face referire doar la metode a căror semnătură corespunde exact cu semnătura delegatului.
- Multicast: Delegatii pot face referire la mai multe metode simultan. La apelarea unui delegat, toate metodele asociate sunt apelate în ordinea în care au fost adăugate.
Exemplu de declarație și utilizare:
// Declararea delegatului
public delegate int MyDelegate(int x, int y);
// Metodă care corespunde semnăturii delegatului
public class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
}
// Utilizarea delegatului
public class Program
{
public static void Main(string[] args)
{
Calculator calc = new Calculator();
// Crearea unei instanțe de delegat și legarea la metoda Add
MyDelegate del = new MyDelegate(calc.Add);
// Apelarea metodei prin delegat
int result = del(5, 3);
System.Console.WriteLine(result); // Afișează: 8
}
}
Odată cu apariția .NET Framework 3.5 și LINQ, delegații generici încorporati au devenit larg utilizati:
Action<T1, ..., Tn>: Delegat care nu returnează valoare (void). Poate accepta între 0 și 16 parametri de tipuri diferite.Func<T1, ..., Tn, TResult>: Delegat care returnează o valoare de tipTResult. Poate accepta între 0 și 16 parametri de tipuri diferite.Predicate<T>: Delegat care acceptă un parametru de tipTși returnează o valoare booleană. Este utilizat pentru verificarea condițiilor.
Tabel comparativ al delegaților încorporați:
| Delegat | Valoare de returnare | Parametri | Exemplu de utilizare |
|---|---|---|---|
Action |
void |
0..16 parametri | Executarea unei acțiuni fără valoare de returnare |
Func<TResult> |
TResult |
0 parametri + valoare de returnare TResult |
Calcul fără date de intrare |
Func<T, TResult> |
TResult |
1 parametru de tip T + valoare de returnare TResult |
Transformarea valorii |
Predicate<T> |
bool |
1 parametru de tip T |
Verificarea condiției |
Delegatii sunt utilizati pe scară largă în gestionarea evenimentelor, operațiuni asincrone, LINQ și pentru implementarea callback-urilor.