Junior
Cosa sono i delegati in C# e a cosa servono?
sobes.tech AI
Risposta dell'AI
I delegati in C# sono puntatori sicuri di tipo ai metodi. Incapsulano un metodo, permettendo di passarli come parametro o usarli come tipo di variabile.
Vengono usati per:
- Implementazione del pattern osservatore (Observer): Gli eventi in C# si basano sui delegati. L'emittente notifica gli iscritti chiamando il delegato.
- Callback: Passare un metodo come argomento a una funzione che lo chiamerà più tardi.
- Programmazione generica: I delegati
ActioneFuncpermettono di creare metodi generici che lavorano con diverse firme. - Programmazione parallela e asincrona: I metodi per eseguire in altri thread o in modo asincrono sono spesso passati tramite delegati.
- LİNQ: Gli operatori LINQ usano attivamente i delegati per definire condizioni di filtro, trasformazione, ecc.
Esempio di dichiarazione e utilizzo di un delegato:
// Dichiarazione di un delegato con firma void e un argomento di tipo int
public delegate void MyDelegate(int x);
public class MyClass
{
public void PrintNumber(int num)
{
Console.WriteLine($"Numero: {num}");
}
public static void Main(string[] args)
{
// Creazione di un'istanza del delegato che punta al metodo PrintNumber
MyDelegate del = new MyDelegate(new MyClass().PrintNumber);
// Chiamata del metodo tramite il delegato
del(10);
}
}
Esempio con Action (per metodi void senza valore di ritorno):
using System;
public class OtherClass
{
public void ExecuteAction(Action action)
{
action(); // Esegue il delegato passato
}
public static void Main(string[] args)
{
Action myAction = () => Console.WriteLine("Ciao da Action!");
new OtherClass().ExecuteAction(myAction);
}
}
Esempio con Func (per metodi con valore di ritorno):
using System;
public class ThirdClass
{
public int Calculate(Func<int, int, int> operation, int a, int b)
{
return operation(a, b); // Esegue l'operazione passata e restituisce il risultato
}
public static void Main(string[] args)
{
Func<int, int, int> add = (x, y) => x + y;
int result = new ThirdClass().Calculate(add, 5, 3);
Console.WriteLine($"Risultato della somma: {result}");
}
}