C# Delegates ve Events: Olay Tabanlı Programlama Temelleri

Delegate, bir fonksiyonun türünü tanımlayan bir şablondur. Tıpkı int, string gibi bir veri tipi gibi düşün; ama değer tutmak yerine fonksiyon tutarlar.

Olay (event) ise delegate kullanarak bir şeyler olduğunda bildirim göndermek için kullanılır. Örneğin bir buton tıklandığında, bir dosya yüklendiğinde veya bir hata oluştuğunda.

Delegate tanımlamak çok basit. Hangi parametreleri alacağını ve ne döndüreceğini belirtirsin:

1public delegate void ButtonClickHandler(string message);

Bu delegate, bir string parametresi alan ve hiçbir şey döndürmeyen fonksiyonları tutabilir.

Şimdi bir sınıf yap ve içinde bir event tanımla:

1public class Button
2{
3public delegate void ClickHandler();
4public event ClickHandler OnClick;
5
6public void Click()
7{
8OnClick?.Invoke();
9}
10}

Burada OnClick bir event'tir. Soru işareti ve Invoke ile güvenli bir şekilde çağırıyoruz; hiç kimse bağlanmamışsa hata vermez.

Şimdi bu event'e fonksiyon bağla:

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1var button = new Button();
2button.OnClick += () => Console.WriteLine("Butona tıklandı!");
3button.OnClick += () => Console.WriteLine("İkinci işlem.");
4
5button.Click();

Çıktı:

1Butona tıklandı!
2İkinci işlem.

+= operatörü ile birden fazla fonksiyonu aynı event'e bağlayabilirsin. button.Click() çağrıldığında, OnClick event'ine bağlı tüm fonksiyonlar sırasıyla çalışır.

Gerçek hayat senaryosu: bir dosya indirme işlemi tamamlandığında bildirim göndermek:

1public class FileDownloader
2{
3public event Action<string> OnDownloadComplete;
4
5public void Download(string file)
6{
7System.Threading.Thread.Sleep(1000);
8OnDownloadComplete?.Invoke($"{file} indirildi.");
9}
10}
11
12var downloader = new FileDownloader();
13downloader.OnDownloadComplete += (msg) => Console.WriteLine(msg);
14downloader.Download("dosya.zip");

Çıktı:

1dosya.zip indirildi.

Delegate ve event'ler, kod içinde gevşek bağlantı (loose coupling) sağlar. İndirme işlemi yapan kod, kimin bunu dinlediğini bilmez. Dinleyici de indirme kodunun içini bilmez. Aralarında sadece event aracılığıyla iletişim vardır.

Bu yapı özellikle kullanıcı arayüzü, asenkron işlemler ve eklenti sistemlerinde çok kullanılır.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz