Sobes.tech
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 EventHandler ou EventHandler<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.