Sobes.tech
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): event aç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ş EventHandler və ya EventHandler<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.