Junior
Ce sunt evenimentele în C#?
sobes.tech AI
Răspuns de la AI
Evenimentele în C# sunt un mecanism bazat pe modelul "observator" (Observer Pattern), care permite unui obiect (editorul) să notifice alte obiecte (abonamentele) despre apariția unei anumite acțiuni sau schimbări de stare.
Componente principale:
- Editor (Publisher): Clasa care declară un eveniment.
- Eveniment (Event): Declarație a unui eveniment folosind cuvântul cheie
event. Definește semnătura metodei pe care o vor folosi handler-ele. - Delegat (Delegate): Tip care definește semnătura metodelor care pot fi abonate la un eveniment. De obicei, se folosește delegatul predefinit
EventHandlersauEventHandler<TEventArgs>. - Abonat (Subscriber): Clasă sau obiect care se abonează la evenimentul editorului și furnizează o metodă (handler-ul evenimentului) care este apelată la declanșarea evenimentului.
- Handler-ul evenimentului (Event Handler): Metoda abonatului care corespunde semnăturii delegatului evenimentului.
Exemplu de declarație și utilizare:
// Declararea delegatului, dacă nu se folosește delegatul predefinit EventHandler
public delegate void MyEventHandler(object sender, EventArgs e);
// Clasa editor
public class Publisher
{
// Declararea evenimentului folosind delegatul
public event MyEventHandler MyEvent;
public void DoSomething()
{
// Declanșarea evenimentului (dacă există abonați)
OnMyEvent(EventArgs.Empty);
}
// Metodă pentru declanșarea evenimentului (protejat de null)
protected virtual void OnMyEvent(EventArgs e)
{
MyEvent?.Invoke(this, e);
}
}
// Clasa abonat
public class Subscriber
{
public void Subscribe(Publisher publisher)
{
// Abonare la eveniment
publisher.MyEvent += HandleMyEvent;
}
public void Unsubscribe(Publisher publisher)
{
// Dezabonare de la eveniment
publisher.MyEvent -= HandleMyEvent;
}
// Handler-ul evenimentului
private void HandleMyEvent(object sender, EventArgs e)
{
Console.WriteLine("Evenimentul a fost declanșat!");
}
}
// Exemplu de utilizare
public class Program
{
public static void Main(string[] args)
{
Publisher pub = new Publisher();
Subscriber sub = new Subscriber();
sub.Subscribe(pub); // Abonare
pub.DoSomething(); // Declanșare eveniment
sub.Unsubscribe(pub); // Dezabonare (opțional)
}
}
Evenimentele asigură o cuplare slabă (loose coupling) între obiecte, permițându-le să interacționeze fără cunoaștere directă despre implementarea celuilalt.