Junior
Cos'è un delegato in C#?
sobes.tech AI
Risposta dell'AI
Un delegato è un tipo di riferimento dichiarato con la parola chiave delegate. Incapsula un metodo con una firma specifica (tipo di ritorno e tipi di parametri). In sostanza, un delegato è un puntatore sicuro a un metodo.
Proprietà principali dei delegati:
- Incapsulamento dei metodi: Il delegato memorizza informazioni sul metodo a cui fa riferimento.
- Sicurezza di tipo: Il delegato può fare riferimento solo a metodi la cui firma corrisponde esattamente a quella del delegato.
- Multicast: I delegati possono fare riferimento a più metodi contemporaneamente. Quando si invoca un delegato, tutti i metodi associati vengono chiamati nell'ordine in cui sono stati aggiunti.
Esempio di dichiarazione e utilizzo:
// Dichiarazione del delegato
public delegate int MyDelegate(int x, int y);
// Metodo che corrisponde alla firma del delegato
public class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
}
// Utilizzo del delegato
public class Program
{
public static void Main(string[] args)
{
Calculator calc = new Calculator();
// Creazione di un'istanza del delegato e collegamento con il metodo Add
MyDelegate del = new MyDelegate(calc.Add);
// Chiamata del metodo tramite il delegato
int result = del(5, 3);
System.Console.WriteLine(result); // Output: 8
}
}
Con l'introduzione di .NET Framework 3.5 e LINQ, i delegati generici integrati sono diventati ampiamente diffusi:
Action<T1, ..., Tn>: Delegato che non restituisce valore (void). Può accettare da 0 a 16 parametri di diversi tipi.Func<T1, ..., Tn, TResult>: Delegato che restituisce un valore di tipoTResult. Può accettare da 0 a 16 parametri di diversi tipi.Predicate<T>: Delegato che accetta un parametro di tipoTe restituisce un valore booleano. Viene usato per verificare condizioni.
Tabella di confronto dei delegati integrati:
| Delegato | Valore di ritorno | Parametri | Esempio di utilizzo |
|---|---|---|---|
Action |
void |
0..16 parametri | Eseguire un'azione senza valore di ritorno |
Func<TResult> |
TResult |
0 parametri + valore di ritorno TResult |
Calcolo senza dati di input |
Func<T, TResult> |
TResult |
1 parametro di tipo T + valore di ritorno TResult |
Trasformazione di valore |
Predicate<T> |
bool |
1 parametro di tipo T |
Verifica di condizione |
I delegati sono ampiamente utilizzati nella gestione degli eventi, operazioni asincrone, LINQ e per l'implementazione di callback.