Junior
Wat zijn gebeurtenissen in C#?
sobes.tech AI
Antwoord van AI
De gebeurtenissen in C# zijn een mechanisme gebaseerd op het "observer"-patroon (Observer Pattern), waarmee een object (de uitgever) andere objecten (de abonnees) kan informeren over het optreden van een bepaalde actie of wijziging van de toestand.
Belangrijkste componenten:
- Uitgever (Publisher): Klasse die een gebeurtenis declareert.
- Gebeurtenis (Event): Declaratie van een gebeurtenis met het trefwoord
event. Bepaalt de handtekening van de methode die door handlers wordt gebruikt. - Delegaat (Delegate): Type dat de handtekening van methoden definieert die op een gebeurtenis kunnen abonneren. Vaak wordt de vooraf gedefinieerde delegate
EventHandlerofEventHandler<TEventArgs>gebruikt. - Abonnee (Subscriber): Klasse of object dat zich abonneert op de gebeurtenis van de uitgever en een methode (gebeurtenishandler) levert die wordt aangeroepen bij het optreden van de gebeurtenis.
- Gebeurtenishandler (Event Handler): Methode van de abonnee die overeenkomt met de handtekening van de delegate van de gebeurtenis.
Voorbeeld van declaratie en gebruik:
// Declaratie van de delegate, indien de vooraf gedefinieerde EventHandler niet wordt gebruikt
public delegate void MyEventHandler(object sender, EventArgs e);
// Uitgeverklasse
public class Publisher
{
// Declaratie van de gebeurtenis met de delegate
public event MyEventHandler MyEvent;
public void DoSomething()
{
// Trigger de gebeurtenis (indien abonnees aanwezig zijn)
OnMyEvent(EventArgs.Empty);
}
// Methode om de gebeurtenis te triggeren (beschermd tegen null)
protected virtual void OnMyEvent(EventArgs e)
{
MyEvent?.Invoke(this, e);
}
}
// Abonne klasse
public class Subscriber
{
public void Subscribe(Publisher publisher)
{
// Abonneren op de gebeurtenis
publisher.MyEvent += HandleMyEvent;
}
public void Unsubscribe(Publisher publisher)
{
// Afmelden van de gebeurtenis
publisher.MyEvent -= HandleMyEvent;
}
// Gebeurtenishandler
private void HandleMyEvent(object sender, EventArgs e)
{
Console.WriteLine("De gebeurtenis is getriggerd!");
}
}
// Voorbeeld van gebruik
public class Program
{
public static void Main(string[] args)
{
Publisher pub = new Publisher();
Subscriber sub = new Subscriber();
sub.Subscribe(pub); // Abonneren
pub.DoSomething(); // Trigger de gebeurtenis
sub.Unsubscribe(pub); // Afmelden (optioneel)
}
}
Gebeurtenissen zorgen voor een losse koppeling (loose coupling) tussen objecten, waardoor ze kunnen communiceren zonder directe kennis van de implementatie van de ander.