Sobes.tech
Junior

Qu'est-ce qu'un délégué en C#?

sobes.tech IA

Réponse de l'IA

Un délégué est un type de référence déclaré avec le mot-clé delegate. Il encapsule une méthode avec une signature spécifique (type de retour et types de paramètres). En essence, un délégué est un pointeur sécurisé vers une méthode.

Propriétés principales des délégués :

  • Encapsulation des méthodes : Le délégué stocke des informations sur la méthode à laquelle il fait référence.
  • Sécurité de type : Le délégué ne peut faire référence qu'à des méthodes dont la signature correspond exactement à celle du délégué.
  • Multicast : Les délégués peuvent faire référence à plusieurs méthodes simultanément. Lorsqu'un délégué est invoqué, toutes les méthodes associées sont appelées dans l'ordre de leur ajout.

Exemple de déclaration et d'utilisation :

// Déclaration du délégué
public delegate int MyDelegate(int x, int y);

// Méthode correspondant à la signature du délégué
public class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }
}

// Utilisation du délégué
public class Program
{
    public static void Main(string[] args)
    {
        Calculator calc = new Calculator();

        // Création d'une instance du délégué et liaison avec la méthode Add
        MyDelegate del = new MyDelegate(calc.Add);

        // Appel de la méthode via le délégué
        int result = del(5, 3);
        System.Console.WriteLine(result); // Affiche : 8
    }
}

Avec l'apparition de .NET Framework 3.5 et LINQ, les délégués génériques intégrés ont été largement adoptés :

  • Action<T1, ..., Tn> : Délégué ne renvoyant pas de valeur (void). Peut accepter de 0 à 16 paramètres de types différents.
  • Func<T1, ..., Tn, TResult> : Délégué renvoyant une valeur de type TResult. Peut accepter de 0 à 16 paramètres de types différents.
  • Predicate<T> : Délégué acceptant un paramètre de type T et renvoyant une valeur booléenne. Utilisé pour la vérification de conditions.

Tableau comparatif des délégués intégrés :

Délégué Valeur de retour Paramètres Exemple d'utilisation
Action void 0..16 paramètres Exécuter une action sans valeur de retour
Func<TResult> TResult 0 paramètres + valeur de retour TResult Calcul sans données d'entrée
Func<T, TResult> TResult 1 paramètre de type T + valeur de retour TResult Transformation de valeur
Predicate<T> bool 1 paramètre de type T Vérification de condition

Les délégués sont largement utilisés dans la gestion d'événements, les opérations asynchrones, LINQ et pour la mise en œuvre de callbacks.