Sobes.tech
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 Action et Func permettent 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}");
    }
}