Junior
Mis on sündmused C#-s?
sobes.tech AI
Vastus AI-lt
C# sündmused on mehhanism, mis põhineb "vaataja" (Observer Pattern) mustril, võimaldades objektil (väljastajal) teavitada teisi objekte (tellijad) teatud tegevuse või oleku muutusest.
Peamised komponendid:
- Väljastaja (Publisher): Klass, mis deklareerib sündmuse.
- Sündmus (Event): Deklareeritakse kasutades märksõna
event. Määrab meetodi signatuuri, mida kasutavad töötlejad. - Delegaat (Delegate): Tüüp, mis määrab meetodite signatuuri, mis võivad olla sündmusele tellitud. Sageli kasutatakse eelnevalt määratletud
EventHandlervõiEventHandler<TEventArgs>. - Tellija (Subscriber): Klass või objekt, mis tellib väljaandja sündmuse ja pakub meetodit (sündmuse töötleja), mis kutsutakse välja sündmuse toimumisel.
- Sündmuse töötleja (Event Handler): Tellija meetod, mis vastab sündmuse delegaadi signatuurile.
Näide deklareerimiseks ja kasutamiseks:
// Delegaadi deklareerimine, kui eelnevalt määratletud `EventHandler` ei kasutata
public delegate void MyEventHandler(object sender, EventArgs e);
// Väljastaja klass
public class Publisher
{
// Sündmuse deklareerimine delegaadi abil
public event MyEventHandler MyEvent;
public void DoSomething()
{
// Sündmuse kutsumine (kui on tellijaid)
OnMyEvent(EventArgs.Empty);
}
// Meetod sündmuse kutsumiseks (kaitstud null-iga)
protected virtual void OnMyEvent(EventArgs e)
{
MyEvent?.Invoke(this, e);
}
}
// Tellija klass
public class Subscriber
{
public void Subscribe(Publisher publisher)
{
// Tellimine sündmusele
publisher.MyEvent += HandleMyEvent;
}
public void Unsubscribe(Publisher publisher)
{
// Tellimusest loobumine
publisher.MyEvent -= HandleMyEvent;
}
// Sündmuse töötleja
private void HandleMyEvent(object sender, EventArgs e)
{
Console.WriteLine("Sündmus toimus!");
}
}
// Kasutamise näide
public class Program
{
public static void Main(string[] args)
{
Publisher pub = new Publisher();
Subscriber sub = new Subscriber();
sub.Subscribe(pub); // Tellimine
pub.DoSomething(); // Sündmuse kutsumine
sub.Unsubscribe(pub); // Tellimusest loobumine (valikuline)
}
}
Sündmused tagavad nõrga sideme (loose coupling) objektide vahel, võimaldades neil teha koostööd ilma otsese teadmisega teise objekti rakendusest.