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):
eventanahtar 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ı
EventHandlerveyaEventHandler<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.