Aller au contenu

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).

public class Button
{
public event EventHandler Clicked;
protected virtual void OnClicked()
{
Clicked?.Invoke(this, EventArgs.Empty);
}
public void SimulateClick()
{
OnClicked();
}
}

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();
}
}

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);

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.