Junior
Qu'est-ce que les événements en C#?
sobes.tech IA
Réponse de l'IA
Les événements en C# sont un mécanisme basé sur le modèle "observateur" (Observer Pattern), permettant à un objet (l'éditeur) d'informer d'autres objets (les abonnés) de la survenue d'une action ou d'un changement d'état.
Composants principaux:
- Éditeur (Publisher): Classe déclarant un événement.
- Événement (Event): Déclaration d'un événement utilisant le mot-clé
event. Définit la signature de la méthode que les gestionnaires utiliseront. - Délégué (Delegate): Type définissant la signature des méthodes pouvant s'abonner à un événement. Souvent, le délégué prédéfini
EventHandlerouEventHandler<TEventArgs>est utilisé. - Abonné (Subscriber): Classe ou objet qui s'abonne à un événement de l'éditeur et fournit une méthode (gestionnaire d'événement) appelée lors du déclenchement de l'événement.
- Gestionnaire d'événement (Event Handler): Méthode de l'abonné correspondant à la signature du délégué de l'événement.
Exemple de déclaration et d'utilisation:
// Déclaration du délégué, si le délégué prédéfini EventHandler n'est pas utilisé
public delegate void MyEventHandler(object sender, EventArgs e);
// Classe éditeur
public class Publisher
{
// Déclaration de l'événement avec le délégué
public event MyEventHandler MyEvent;
public void DoSomething()
{
// Déclenchement de l'événement (si des abonnés existent)
OnMyEvent(EventArgs.Empty);
}
// Méthode pour déclencher l'événement (protégée contre null)
protected virtual void OnMyEvent(EventArgs e)
{
MyEvent?.Invoke(this, e);
}
}
// Classe abonnée
public class Subscriber
{
public void Subscribe(Publisher publisher)
{
// Abonnement à l'événement
publisher.MyEvent += HandleMyEvent;
}
public void Unsubscribe(Publisher publisher)
{
// Désabonnement de l'événement
publisher.MyEvent -= HandleMyEvent;
}
// Gestionnaire d'événement
private void HandleMyEvent(object sender, EventArgs e)
{
Console.WriteLine("L'événement a été déclenché!");
}
}
// Exemple d'utilisation
public class Program
{
public static void Main(string[] args)
{
Publisher pub = new Publisher();
Subscriber sub = new Subscriber();
sub.Subscribe(pub); // Abonnement
pub.DoSomething(); // Déclenchement de l'événement
sub.Unsubscribe(pub); // Désabonnement (optionnel)
}
}
Les événements assurent un faible couplage (loose coupling) entre objets, leur permettant d'interagir sans connaissance directe de l'implémentation de l'autre.