Invocation d’événement
Contexte : Seule la classe qui déclare l’événement peut l’invoquer (lever l’événement). L’invocation se fait en appelant le champ délégué (avec vérification null).
Pattern d’invocation standard
Section intitulée « Pattern d’invocation standard »public class Button{ public event EventHandler Clicked;
protected virtual void OnClicked() { Clicked?.Invoke(this, EventArgs.Empty); }
public void SimulateClick() { OnClicked(); }}Pourquoi protected virtual ?
Section intitulée « Pourquoi protected virtual ? »Les classes dérivées peuvent surcharger la méthode de déclenchement pour ajouter un comportement personnalisé.
public class SpecialButton : Button{ protected override void OnClicked() { Console.WriteLine("Journalisation spéciale"); base.OnClicked(); }}Sécurité thread
Section intitulée « Sécurité thread »Utilisez une copie du délégué pour éviter une référence null dans les scénarios multi‑threads.
var handler = Clicked;if (handler != null) handler(this, EventArgs.Empty);Exemple d’utilisation dans le monde réel
Section intitulée « Exemple d’utilisation dans le monde réel »Déclenchement d’événement personnalisé : Dans une classe Timer, vous levez l’événement Elapsed lorsque le temps est écoulé via OnElapsed().
Exemple : System.Timers.Timer lève l’événement Elapsed sur un thread d’arrière‑plan.