Junior
Čo sú udalosti v C#?
sobes.tech AI
Odpoveď od AI
Udalosti v jazyku C# sú mechanizmus založený na vzorec "pozorovateľ" (Observer Pattern), ktorý umožňuje objektu (vydavateľovi) informovať iné objekty (odberateľov) o nastaní určitej akcie alebo zmene stavu.
Hlavné komponenty:
- Vydavateľ (Publisher): Trieda, ktorá oznamuje udalosť.
- Udalosť (Event): Oznámenie udalosti pomocou kľúčového slova
event. Určuje signatúru metódy, ktorú budú používať spracovatelia. - Delegát (Delegate): Typ, ktorý určuje signatúru metód, ktoré môžu byť prihlásené na udalosť. Často sa používa preddefinovaný delegát
EventHandleraleboEventHandler<TEventArgs>. - Odberateľ (Subscriber): Trieda alebo objekt, ktorý sa prihlási na udalosť vydavateľa a poskytuje metódu (spracovateľ udalosti), ktorá sa volá pri jej aktivácii.
- Spracovateľ udalosti (Event Handler): Metóda odberateľa, ktorá zodpovedá signatúre delegáta udalosti.
Príklad deklarácie a použitia:
// Deklarácia delegáta, ak sa nepoužíva preddefinovaný EventHandler
public delegate void MyEventHandler(object sender, EventArgs e);
// Trieda vydavateľa
public class Publisher
{
// Oznámenie udalosti pomocou delegáta
public event MyEventHandler MyEvent;
public void DoSomething()
{
// Vyvolanie udalosti (ak sú odberatelia)
OnMyEvent(EventArgs.Empty);
}
// Metóda na vyvolanie udalosti (chránená pred null)
protected virtual void OnMyEvent(EventArgs e)
{
MyEvent?.Invoke(this, e);
}
}
// Trieda odberateľa
public class Subscriber
{
public void Subscribe(Publisher publisher)
{
// Prihlásenie na udalosť
publisher.MyEvent += HandleMyEvent;
}
public void Unsubscribe(Publisher publisher)
{
// Odhlásenie od udalosti
publisher.MyEvent -= HandleMyEvent;
}
// Spracovateľ udalosti
private void HandleMyEvent(object sender, EventArgs e)
{
Console.WriteLine("Udalosť sa aktivovala!");
}
}
// Príklad použitia
public class Program
{
public static void Main(string[] args)
{
Publisher pub = new Publisher();
Subscriber sub = new Subscriber();
sub.Subscribe(pub); // Prihlásenie
pub.DoSomething(); // Vyvolanie udalosti
sub.Unsubscribe(pub); // Odhlásenie (voliteľné)
}
}
Udalosti zabezpečujú slabé prepojenie (loose coupling) medzi objektmi, čo im umožňuje spolupracovať bez priamej znalosti o implementácii druhého.