Aller au contenu

Délégués multicast

Contexte : Les délégués peuvent contenir plusieurs méthodes via les opérateurs + et -. L’invocation d’un délégué multicast appelle toutes les méthodes dans l’ordre.

public delegate void Notify(string message);
public static void LogToFile(string msg) => Console.WriteLine($"Fichier : {msg}");
public static void LogToConsole(string msg) => Console.WriteLine($"Console : {msg}");
Notify logger = LogToFile;
logger += LogToConsole; // ajoute la deuxième méthode
logger("Hello"); // les deux méthodes sont appelées
logger -= LogToFile; // supprime la première méthode
logger("Seulement console");

Pour les délégués multicast avec un retour non void, seule la valeur de la dernière méthode est conservée. Utilisez GetInvocationList() pour traiter toutes.

foreach (Notify n in logger.GetInvocationList())
{
n("Traitement");
}

Notifications d’événements : Plusieurs abonnés à un événement sont stockés comme un délégué multicast. Lever l’événement notifie tous les abonnés.

Exemple : Dans ASP.NET Core, les événements IApplicationLifetime utilisent des délégués multicast.