Junior
C#-də hadisələr nədir?
sobes.tech Süni İntellekt
AI-dan cavab
C#-də hadisələr " müşahidəçi " (Observer Pattern) nümunəsinə əsaslanan mexanizmdir və obyektə (nəşr edənə) müəyyən bir hərəkət və ya vəziyyət dəyişiklikləri barədə digər obyektləri (abunəçiləri) xəbər verməyə imkan verir.
Əsas komponentlər:
- Nəşr edən (Publisher): Hadisəni elan edən sinif.
- Hadisə (Event):
eventaçar sözü ilə elan olunan hadisə. Bu, hadisə işləyicilərinin istifadə edəcəyi metodun imzasını müəyyən edir. - Delegat (Delegate): Hadisəyə abunə ola biləcək metodların imzasını müəyyən edən növ. Adətən, əvvəlcədən təyin olunmuş
EventHandlervə yaEventHandler<TEventArgs>delegatı istifadə olunur. - Abunəçi (Subscriber): Nəşr edən obyektin hadisəsinə abunə olan və hadisə baş verdikdə çağırılan metod (hadisə işləyicisi) təmin edən sinif və ya obyekt.
- Hadisə işləyicisi (Event Handler): Abunəçinin metodu, hadisənin delegat imzasına uyğundur.
Nümunə elan və istifadə:
// Əvvəlcədən təyin olunmuş EventHandler istifadə olunmayanda delegatın elan olunması
public delegate void MyEventHandler(object sender, EventArgs e);
// Nəşr edən sinif
public class Publisher
{
// Delegat istifadə edilərək hadisənin elan olunması
public event MyEventHandler MyEvent;
public void DoSomething()
{
// Hadisəni başlat (əgər abunəçilər varsa)
OnMyEvent(EventArgs.Empty);
}
// Hadisəni başlatmaq üçün metod (null-dan qorunur)
protected virtual void OnMyEvent(EventArgs e)
{
MyEvent?.Invoke(this, e);
}
}
// Abunəçi sinfi
public class Subscriber
{
public void Subscribe(Publisher publisher)
{
// Hadisəyə abunə olmaq
publisher.MyEvent += HandleMyEvent;
}
public void Unsubscribe(Publisher publisher)
{
// Hadisədən çıxmaq
publisher.MyEvent -= HandleMyEvent;
}
// Hadisə işləyicisi
private void HandleMyEvent(object sender, EventArgs e)
{
Console.WriteLine("Hadisə baş verdi!");
}
}
// İstifadə nümunəsi
public class Program
{
public static void Main(string[] args)
{
Publisher pub = new Publisher();
Subscriber sub = new Subscriber();
sub.Subscribe(pub); // Abunəlik
pub.DoSomething(); // Hadisəni başlat
sub.Unsubscribe(pub); // Çıxış (seçimlidir)
}
}
Hadisələr obyektlər arasında zəif əlaqə (loose coupling) təmin edir və onların bir-biri haqqında birbaşa məlumat olmadan qarşılıqlı əlaqə qurmasına imkan verir.