Junior
Qu'est-ce que les délégués en C# et à quoi servent-ils?
sobes.tech IA
Réponse de l'IA
Les délégués en C# sont des pointeurs de méthode sûrs pour le type. Ils encapsulent une méthode, permettant de la passer en paramètre ou de l'utiliser comme type de variable.
Ils sont utilisés pour :
- Implémentation du pattern observateur (Observer) : Les événements en C# sont basés sur des délégués. L'émetteur notifie les abonnés en appelant le délégué.
- Rappels (Callbacks) : Passer une méthode en argument à une fonction qui l'appellera plus tard.
- Programmation générique : Les délégués
ActionetFuncpermettent de créer des méthodes génériques fonctionnant avec différentes signatures. - Programmation parallèle et asynchrone : Les méthodes pour exécuter dans d'autres threads ou de manière asynchrone sont souvent passées via des délégués.
- LİNQ : Les opérateurs LINQ utilisent activement des délégués pour définir des conditions de filtrage, de transformation, etc.
Exemple de déclaration et d'utilisation d'un délégué :
// Déclaration d'un délégué avec la signature void et un argument de type int
public delegate void MyDelegate(int x);
public class MyClass
{
public void PrintNumber(int num)
{
Console.WriteLine($"Nombre : {num}");
}
public static void Main(string[] args)
{
// Création d'une instance du délégué pointant vers la méthode PrintNumber
MyDelegate del = new MyDelegate(new MyClass().PrintNumber);
// Appel de la méthode via le délégué
del(10);
}
}
Exemple avec Action (pour méthodes void sans valeur de retour) :
using System;
public class OtherClass
{
public void ExecuteAction(Action action)
{
action(); // Exécuter le délégué passé
}
public static void Main(string[] args)
{
Action myAction = () => Console.WriteLine("Bonjour depuis Action!");
new OtherClass().ExecuteAction(myAction);
}
}
Exemple avec Func (pour méthodes avec valeur de retour) :
using System;
public class ThirdClass
{
public int Calculate(Func<int, int, int> operation, int a, int b)
{
return operation(a, b); // Exécuter l'opération passée et retourner le résultat
}
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($"Résultat de l'addition : {result}");
}
}