Junior — Middle
Comment distinguer un délégué d'un événement et quelles sont leurs principales différences?
sobes.tech IA
Réponse de l'IA
En C# le délégué est un type qui représente une référence à une méthode avec une signature spécifique. Les délégués permettent d’appeler des méthodes de manière indirecte, en les passant en paramètre ou en les stockant pour un appel ultérieur.
L’événement est un mécanisme basé sur les délégués, utilisé pour notifier les abonnés de la survenue d’une action ou d’un changement d’état. L’événement encapsule le délégué et limite l’accès à celui-ci : les abonnés ne peuvent que ajouter ou supprimer des gestionnaires, mais ne peuvent pas invoquer l’événement directement.
Principales différences :
- Le délégué est un type, l’événement est un membre de classe utilisant un délégué.
- Le délégué peut être invoqué directement, l’événement non (l’invocation de l’événement n’est possible qu’à l’intérieur de la classe où il est déclaré).
- L’événement assure l’encapsulation et la sécurité, empêchant l’appel arbitraire des gestionnaires depuis l’extérieur.
Exemple :
public delegate void Notify(string message); // délégué
public class Process
{
public event Notify ProcessCompleted; // événement
public void Start()
{
// ... exécution du processus
OnProcessCompleted("Processus terminé");
}
protected virtual void OnProcessCompleted(string msg)
{
ProcessCompleted?.Invoke(msg); // invocation de l’événement
}
}
// Utilisation :
var process = new Process();
process.ProcessCompleted += msg => Console.WriteLine(msg); // abonnement
process.Start();