Sobes.tech
Junior

C#'ta olaylar nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

C#'ta olaylar, gözlemci (Observer Pattern) tabanlı bir mekanizmadır ve bir nesnenin (yayıncı) belirli bir eylem veya durum değişikliğinden diğer nesneleri (aboneleri) haberdar etmesine olanak tanır.

Ana bileşenler:

  • Yayıncı (Publisher): Bir olay ilan eden sınıf.
  • Olay (Event): event anahtar kelimesi kullanılarak bildirilen olay. İşleyicilerin kullanacağı yöntemin imzasını tanımlar.
  • Delegat (Delegate): Olaylara abone olabilecek yöntemlerin imzasını tanımlayan tür. Genellikle önceden tanımlı EventHandler veya EventHandler<TEventArgs> kullanılır.
  • Abone (Subscriber): Yayıncının olayına abone olan ve olay tetiklendiğinde çağrılan bir yöntem (olay işleyici) sağlayan sınıf veya nesne.
  • Olay İşleyici (Event Handler): Olayın delegat imzasına uygun abone yöntemi.

İlan ve kullanım örneği:

// Önceden tanımlı EventHandler kullanılmıyorsa delegat bildirimi
public delegate void MyEventHandler(object sender, EventArgs e);

// Yayıncı sınıf
public class Publisher
{
    // Delegat kullanılarak olay bildirimi
    public event MyEventHandler MyEvent;

    public void DoSomething()
    {
        // Olayı tetikle (aboneler varsa)
        OnMyEvent(EventArgs.Empty);
    }

    // Olayı tetikleyen metod (null kontrolü ile)
    protected virtual void OnMyEvent(EventArgs e)
    {
        MyEvent?.Invoke(this, e);
    }
}

// Abone sınıfı
public class Subscriber
{
    public void Subscribe(Publisher publisher)
    {
        // Olaya abone olma
        publisher.MyEvent += HandleMyEvent;
    }

    public void Unsubscribe(Publisher publisher)
    {
        // Olaydan aboneliği iptal etme
        publisher.MyEvent -= HandleMyEvent;
    }

    // Olay işleyici
    private void HandleMyEvent(object sender, EventArgs e)
    {
        Console.WriteLine("Olay tetiklendi!");
    }
}

// Kullanım örneği
public class Program
{
    public static void Main(string[] args)
    {
        Publisher pub = new Publisher();
        Subscriber sub = new Subscriber();

        sub.Subscribe(pub); // Abone olma

        pub.DoSomething(); // Olayı tetikle

        sub.Unsubscribe(pub); // Aboneliği iptal et (isteğe bağlı)
    }
}

Olaylar, nesneler arasında gevşek bağlılık (loose coupling) sağlar ve doğrudan birbirlerinin uygulamalarını bilmeden etkileşimde bulunmalarına olanak tanır.