Bu makalede, C# programlama dilinde sıkça kullanılan delegates ve events kavramları ele alınmaktadır Delegates, metotları parametre olarak taşıyabilen işaretçilerdir Events ise nesnelerin olaylarına atıfta bulunmak için kullanılır İki kavram birbirine benzese de, events daha çok olay yönetimi için kullanılırken, delegates genel amaçlı işaretçilerdir Delegates kullanarak bir olay tetiklendiğinde çağrılacak metotları saklayabilir ve bu metotları olay gerçekleştiğinde tetikleyebiliriz Bu, C# programlama dilinde events ile ilişkilidir Anlık delegeler, herhangi bir metot atanabilen delegelerdir ve genellikle olay tabanlı programlamada kullanılır Bu kavramlar, C# programlama dilinde daha iyi bir programlama deneyimi için kullanışlı bir araçtır

C# programlama dili, güçlü özellikleri ile birçok projede tercih edilen bir programlama dilidir. Bu özellikleri arasında delegates ve events kavramları da yer almaktadır. Delegates ve events kavramları, C# programlama dilinde oldukça sık kullanılan işlemcilerdir.
Bu makalede C# programlama dilinde delegates ve events kavramları ele alınacak. Delegates ve events kavramları, daha iyi bir programlama deneyimi için kullanışlı bir araçtır. Bu nedenle, bu kavramların özellikleri ve kullanımı ayrıntılı olarak açıklanacaktır.
Delegates Nedir?
C# programlama dilinde delegates, metotları parametre olarak taşıyabilen işaretçilerdir. İşaretçiler, fonksiyonları bellekte bulan ve bir metoda yeniden atamak için kullanılan özel değişkenlerdir. Delegates, bir metodu işaret eder ve bu metot, bir başka metoda parametre olarak gönderilebilir veya bir delege değişkenine atanabilir.
Bir delegate, bir method signature'ı (imzasına) sahiptir ve belirtilen parametreler ve dönüş değeri ile birlikte metodu işaret eder. Yani, delegate bir fonksiyonu işaret eden bir işaretçi olarak düşünülebilir. Delegates, dışarıdan çağrılamayan bir metodu işaret edebilmek için kullanılır ve bir olay tetiklemek gibi bir işlem gerçekleştirmeleri gerektiğinde çok faydalıdırlar.
Bu kavram, özellikle event bazlı programlamada sıklıkla kullanılmaktadır. Delegates kullanarak bir event tetiklendiğinde çağrılacak olan metotları saklayabiliriz ve bu metotları olay gerçekleştiğinde tetikleyebiliriz. Bu, C# programlama dilinde events ile ilişkilidir.
Events Nedir?
Events, C# programlama dilinde nesnelerin olaylarına atıfta bulunmak için kullanılır. Bir olay, bir nesnenin durumunda veya başka bir olayda değişiklik olduğunda tetiklenebilir. Bu, söz konusu nesnenin belirli bir metodu çağırarak, nesnenin bu değişiklikten etkilenen diğer nesnelere bir mesaj göndermesi ile gerçekleşir.
Events, biraz önce bahsedilen delegates yapısına benzer bir şekilde çalışır. Bir olayın tetiklenip tetiklenmediğini belirleyen, buna bağlı olarak belirli bir metot ya da metot grubunu çağıran bir işaretçidir. İşaretçi, delegenin işlevini yerine getirir. Ancak, delegate'den farklı olarak, event'lerin bir veya daha fazla event handler'ı vardır. Event handler'lar, event'in gerçekleşme anında tetiklenen kod parçacıklarıdır.
Delegate Kullanımı
C# programlama dilinde delegates, metotları parametre olarak taşıyabilen işaretçilerdir. Bu sayede, bir metotun başka bir metota parametre olarak geçirilebilmesi veya bir metotun sonucunun farklı bir metota parametre olarak geçirilmesi mümkün hale gelir. Delegate kullanımı için örnek bir senaryo ele alalım.
Bir hesap makinesi programı yazıyorsunuz ve programınızda kullanıcıların yapabileceği 4 işlem olduğunu varsayıyoruz. İlk olarak toplama işlemi için bir "Add" (Ekle) metodu oluşturuyoruz. Daha sonra, çıkarma işlemi için "Subtract" (Çıkar) metodu oluşturuyoruz. Bu iki metodu, bir ana programda çağırdığımızda sonuçları elde edebiliriz.
Bununla birlikte, ilerleyen zamanlarda kullanıcılar programınızdaki işlemleri kendileri oluşturabileceği için, bu işlemleri metotlarla birlikte parametre olarak geçirmemiz gerekebilir. Bu noktada devreye delegate kullanımı girer.
Delegate kullanarak, Add ve Subtract metotlarını bir delegate içinde toplayabiliriz. Delegate'in tipi, Add ve Subtract metotlarının parametreleriyle eşleşmelidir. Şimdi, işlem yapan bir "Calculator" (Hesap Makinesi) adlı sınıf oluşturalım ve delegate kullanarak bu sınıfta işlemleri gerçekleştirelim.
İşlem | Parametreler | Dönüş Değeri |
---|---|---|
Add | İki sayı | Toplam |
Subtract | İki sayı | Fark |
Delegate kullanımı, Add ve Subtract metotlarını birbirine eşitleyerek bir takım işlemler yapmamızı sağlar. Bu şekilde, programın daha modüler olmasını sağlar. Herhangi bir metodun yanı sıra delegate'in de parametre olarak geçirilebilmesi, işlemlerin daha hızlı ve etkili bir şekilde yapılmasına yardımcı olur.
Anlık Delegeler
Anlık delegeler, C# programlama dilinde delegate tanımlanırken atanabilen, yani başka bir deyişle işaret edilebilen metotlardır. Bu şekilde delegate'ye, istenilen zaman herhangi bir metot atanabilir ve bu metotlar, herhangi bir yerde çağrılabilir.
Anlık delegeler genellikle, belirli bir olay gerçekleştiğinde tetiklenen olayların çalıştırılması için kullanılır. Örneğin, bir görsel bileşenin tıklanması, klavyede bir tuşa basılması gibi olaylar gerçekleştiğinde, atanmış bir metot tetiklenir. Bu şekilde kullanıldığında, anlık delegeler, kodun daha modüler ve esnek olmasını sağlar.
Anlık delegeler genellikle tek metot atanırken kullanılır. Ancak, birden fazla metodu aynı anda işaret edebilen çift yönlü delegeler de kullanılabilir. Böylece, bir olay çift yönlü delegeler tarafından yönetilerek, birden fazla metodu çalıştırabilir.
- Bir düğmenin tıklanması
- Bir metnin girilmesi
- Klavye tuşuna basılması
Kod örneği:
public delegate void ButtonClickHandler(object sender, EventArgs e); |
---|
// Anlık delegeler kullanımı örneği |
ButtonClickHandler handler = delegate (object sender, EventArgs e) { /* Metot kodları */ }; |
Bu kod, ButtonClickHandler adlı bir anlık delegeler türünü tanımlar ve bu delegeler, bir tıklama eylemi gerçekleştiğinde çalıştırılacak bir metodu atanır. Bu şekilde, EventHandler adlı bir önceden tanımlanmış delegeler türüne alternatif olarak, aynı görevi yapan bir anlık delegeler türü yaratılmış olur.
Çoklu Delegeler
Delegates, C# programlama dilinde bir işlevi işaret eden parametrelerdir. Delegeler sadece bir işlevi işaret etmekle kalmayıp, birden fazla işlevi de işaret edebilirler. Birden fazla işlevi işaret eden bu delegeler, çoklu delegeler olarak adlandırılır. Çoklu delegeler, bir olayı tetiklemede veya metot çağrısında çok kullanışlı olabilir.
Çoklu delegelerin kullanımı oldukça basittir. Sadece birden fazla işlevi aynı delegede taşımak gerekir. Çoklu delegeler, C# programlama dilinde kullanımı oldukça yaygındır. Örneğin, bir olay tetiklendiğinde birden fazla metot çalıştırmak isterseniz, bu delegeleri kullanabilirsiniz. Ayrıca, delegelerin kullanımı birden fazla metot çağırmak ve sonuçlarını birleştirmek için de kullanılabilir.
Çoklu delegelerin kullanımı, birden fazla metot çalıştırma ihtiyacı olduğunda oldukça yararlıdır. Özellikle, olayların birleştirilmesi gereken durumlarda çoklu delegeler oldukça kullanışlıdır. Çoklu delegeler ayrıca, C# programlama dilindeki delegelerin en önemli özelliklerinden biridir.
Event Kullanımı
Event, bir nesnenin bir olayı gerçekleştiğinde tetiklenebilecek metotları temsil eder. Event kullanımı biraz daha karmaşıktır ve genellikle GUI uygulamalarında kullanılır. Örnek olarak, bir düğmenin tıklanması bir event'tir ve bu event ile ilişkili olan metot çağrılır. Event kullanmak için önce bir event tanımlamak gerekir.
Bir event tanımlamak için, öncelikle delegate tanımlamak gerekir. Delegate, event'in çalışacağı metotları işaret ederek, o metotları bir event'e bağlayacağız. Sonrasında event tanımlayabiliriz. Event'in ne zaman tetikleneceği, olayın adı ve hangi delegate'i kullanacağı gibi özellikler belirlenir.
Örnek olarak, bir kedi sınıfı düşünelim ve kedinin miyavlaması bir event olsun. Event tanımlamak için:
Değişken | Tanımı |
---|---|
Event | Kedinin miyavladığı event |
Delegate | Miyavlamak için kullanılan delegate |
Event'in tetiklenmesi için, öncelikle delegelerden birine metot ataması yapmak gerekir.
- Handler: Kedinin miyavladığında çalışacak metot
Sonrasında, kedi miyavladığında event çalışacak ve atanmış olan handler metodu çağrılacaktır.
Event kullanımının en yaygın kullanımı GUI uygulamalarındadır. Örneğin, butona tıklama event'i, textbox'a yazı yazma event'i gibi.
Event Handler Tanımlama
Event Handler Tanımlama
Event handler, bir event gerçekleştiğinde çağrılan bir metottur. Bir event'in nasıl tanımlandığı ve event handler'ların nasıl oluşturulduğunu öğrenmek, C# programlama dilinde event kullanımını anlamak için önemlidir. Event tanımlama ve event handler oluşturma aşamaları şu şekildedir:
Adım | Açıklama |
1 | Event oluşturma |
2 | Delegate tanımlama |
3 | Event tanımlama |
4 | Event handler oluşturma |
Event tanımlama aşamasında, bir event oluşturulur ve event adı belirtilir. Delegate tanımlama aşamasında, event handler'ların kullanacağı delegate tipi belirlenir. Event tanımlama aşamasında ise, event'in gerçekleştiğinde tetiklenecek olan delegate işaretçisi event'e atanır. Son olarak, event handler'lar, event'in tetiklenmesi durumunda çağrılacak olan metotlardır ve event handler oluşturma aşamasında belirlenir.
Bir event handler, EventHandler veya EventHandler
Event Trigger Etme
Event trigger etmek, belirli bir koşul gerçekleştiğinde event'in otomatik olarak çalıştırılmasıdır. Bu, belirli bir nesne tarafından tetiklenebilen bir olaydır. Bu olaya abone olan event handler'lar birden fazla olabilir.
Event trigger etmek için, event'in public bir method olarak tanımlandığından emin olmalısınız. Bu sayede event handler'ların bu olayı dinleyebilmesi için gerekli olan aboneliklerini oluşturabilirsiniz.
Örneğin, bir butonun tıklanması bir event olarak tanımlanabilir. Tıklama olayını tetiklemek için, kullanıcının butona tıklaması gerekmektedir. Bu nedenle, burada kullanıcının tıklama hareketi belirli bir koşulu temsil etmektedir.
Bir event trigger etmek için, belirli bir koşul belirlemeli ve bu koşul gerçekleştiğinde event'ın tetiklenmesi için kodlar yazmalısınız. Bu sayede event handler'ların olayı dinlemesi mümkün hale gelir ve istenilen aksiyonlar otomatik olarak gerçekleştirilebilir.
Delegates ve Events Arasında Farklar
C# programlama dilindeki delegates ve events kavramları birbirlerinden farklıdır ancak aynı zamanda birbirleriyle bağlantılıdır. Delegates, işaretçi özelliği taşıyan, metotları parametre olarak taşıyabilen yapılardır. Events ise, bir nesnenin gerçekleşen olaylarına karşılık gelen metotları temsil ederler.
Delegates ve events arasındaki en belirgin fark, kullandıkları olaylar ve delege parametreleri aracılığıyla metotlara aktarılan verilerin farklı olmasıdır. Delegates, genellikle çevrimiçi etkinliklerin çağrılması için kullanılırken, events daha çok nesne yönlü programlama, grafiksel kullanıcı arayüzü ve reel zamanlı etkinlik programlama için kullanılır.
Delegates ve events arasındaki bir diğer fark da delegelerin bağımsız olması, events'in ise bir nesne tarafından sahiplenilmesidir. Delegates, metotları birbirine bağlamak ve çağırmak için kullanıldığından, herhangi bir nesne tarafından çağrılabilirler. Ancak events, bir nesne tarafından kontrol edilir ve tetiklenirler.
Bu farklar nedeniyle, delegates ve events birbirlerine bağlı ancak birbirlerinden ayrılmaz kavramlar olarak düşünülmelidir. Her iki yapının da C# programlama dilinde farklı amaçlara hizmet etmesi ve farklı olaylarla ilişkili olması, programcılara farklı seçenekler sunar ve koda daha esnek bir yaklaşım sağlar.
Delegates ve Events'ın Ortak Yanları
Delegates ve Events kavramları farklı işlevlere sahip olsalar da bazı ortak özellikleri de bulunmaktadır. İlk olarak, her ikisi de bir olaya yanıt olarak bir metodu çalıştırmak için kullanılırlar. Delegates'ler, runnable bir metodu temsil eder, oysa events, bir olayın tetiklenmesinde çalıştırılacak olan bir veya daha fazla metodu temsil eder.
Bunun yanı sıra, her ikisi de C# programlama dilinde kullanılan nesne yönelimli bir yaklaşımı destekler. Bu nedenle, bir olayların nesne yönelimli bir programlama yaklaşımıyla uyumlu hale getirilmesi mümkün olur. Ayrıca delegates ve events, çok sayıda kod yazmayı gerektirmeden uygulamanın boyutunu azaltmak için kullanılabilir.
Ayrıca, delegates ve events kavramları, ana iş parçacığı üzerinde çalışmayan ve bu sayede performansı artıran asenkron bir yapıya sahiptir. Bu nedenle, özellikle ağ işlemlerinde uzun işlemlerin iş parçalarını etkilemesine izin vermeden işlem yapmak için yararlıdır.
Delegates ve Events'ın Farkları
Delegates ve events, C# programlama dilinde temel kavramlardır ve son derece önemlidir. Delegates, bir metodu temsil eden işaretçilerdir ve parametre olarak taşınabilir. Events ise bir nesnenin olayını temsil eder ve belirli bir metodu tetikler. Delegates ve events arasındaki farklar:
- Delegates, metot referansını taşırken events nesne olaylarını temsil eder.- Delegates, beklenen metodu çalıştırmak için çalıştırıldığında çalışırken, events olayı tetikleme zamanına bağlı olarak çalışır.- Delegates, bir metodun adresini parametre olarak alan metotlardır. Events ise, olay tetiklendiğinde belirli bir metodu çalıştıracak sağlayıcıdır. Delegates ve events, aynı zamanda önemli benzerliklere sahiptirler. Her ikisi de metodu çağırmak için işaretçi kullanır ve her ikisi de birden fazla metot için kullanılabilir. Ancak, delegates öncelikle geri çağırma işlevleri için kullanılırken, events olay tabanlı tasarım için kullanılır.
Delegates ve events birbirinden farklı işlevlere sahip olduğundan, bunları birbirinin yerine kullanmamak gerekir. Delegates ve events, C# programlama dilindeki en önemli kavramlardan biridir ve delege ve event kullanımlarının doğru anlaşılması, programlama dilinde başarılı ve verimli bir şekilde yazılım geliştirmeyi sağlayacaktır.