C# Delegate kullanımı

C# yazılım dilinde delegate kullanımı oldukça fazladır. Delegate nedir sorusuna cevabımız içerisinde bir den fazla metot barındıran yapılar diyebiliriz. Yani birden çok metodu belli bir sıra ile delegate sayesinde çalıştırmamız mümkün

Delegate tanımlaması nasıl yapılır?

Bu işlem yeni bir metot tanımlaması ile çok benzerlikler göstermektedir. Aşağıda ki kod bloğunda delegete tanımlaması yapılmıştır.

Yukarda da anlayacağınız üzere her hangi bir parantez yada scop açmadan tanımlamamızı yaptık. Şimdi ise gelin bir nesne oluşturalım.

Yukardan da anlayacağınız üzere G1 kelimesi ile delegatimizin tüm özelliklerine artık erişebiliriz. Bizim tarafımızdan tanımlanan bu keyword üzerinden metot atamalarımızı yada çıkarma işlemlerinin tamamını buradan yapacağız.

Şimdi ise hep beraber bir takım metotlar tanımlayarak bu metotları oluşturduğumuz Delegate içerisine tanımlayalım.

Şimdi ise bu metotlarımızı Delegate içerisine ekleyelim. Bunun için Baslat isminde bir metot oluşturuyorum.

Yukarda gördüğünüz += işaretlerinin anlamı sağda bulunan metodu Delegate eklemek anlamına gelmektedir. Burada birden fazla dediğimiz için ek olarak bu metodu da ekliyorum anlamı bulunmaktadır. Yine en son Delegate olarak tanımladığımız G1 bir metot çağırır gibi çağırmaktayız.

Console çıktımız bu şekilde oldu

Delegate üzerinden istediğimiz kadar metot eklemesi yaptığımız gibi istememiz durumunda var olan metotlarımızı silebiliriz bu işlemi yapmak için ise -= operatörünü kullanabiliriz.

Haydi dostum gelin şimdide geriye int dönen bir dört islem yapabilen bir delegate tanımlaması yapalım.

Yukarda ki kodlarda bir espri yok aslında sadece geri dönüş tipini int yaptım. Geri kalan her şey bir önce ki işlemim ile aynı. Sadece iki adet int parametre istedim. Şimdi ise metotlarımı tanımlıyorum.

Toplama, çıkarma ve çarma olarak üç adet metot tanımlaması yaptık, dördünca tanımlamayı biraz sonra yapacağım. Şimdi bu metotlarımı Delegate içerisine ekleyelim.

Metotlarımı ekledim ve parametre olarak 99 ve 33 int değerler verdim. Bu haliyle aslında delegate işlemleri tamamlanmış oldu. Ama olayı birde şu acıdan düşünmemiz lazım. Peki Ama Delegate içerisinde ki bir metota nasıl ulaşım sağlıcam ? Çünkü yukarda ki kodları mı çalıştırdığımda karşıma boş bir ekran çıkacak normal şartlarda Delegate gerekli hesaplamayı yaptı ve hafızasına aldı ama biz bunu şuan göremiyoruz. Görmek için gelir bir kaç satır daha kod yazalım.

Öncelikli Delegate içerisinde bulunan metotlara erişim sağlamak için bir array yani diziye ihtiyacım var. Bu durumda System kütüphanesinin içerisinde bulunan Delegete isimli sınıfımız çağırıyoruz ve aşağıdak ki gibi bir tanımlama yapıyoruz.

GetInvocationList metodu Delegate içerisinde ki metotları listesini bize verir. Şimdi ise bir for döngüsü sayesinde sonuçları görmeye çalışalım

Sonuç harika konsol ekranımda işlemlerimin sonuçlarını gördüm. Şimdi ise bölme işlemini yapalım ancak bu kez lampda ifadesi kullanarak bu işlemi yapalım. Lampda konusu hakkında ilerde ayrıntılı bir yazı ve video sizleri bekliyor olacak.

Yukarda ki konsol görünümü ile işlemin başarı ile sonuçlandığını görebiliriz. Umarım Delegate konusunu anladınız ve artık projelerinizde kullanırsınız.

Sevgili takipçilerimiz sizler için bir çok alanda bilgilenmeniz için eğitim videoları çekerek sizlere hizmet etmeye çalışmaktayım. Bu nedenle biz yeni kurulan bir aileyiz ve bu ailenin yeni üyelere ihtiyacı vardır. Bu nedenle sizleri ailemizde görmeyi çok isterim. Youtube kanalıma abone olarak sizde Web pazarı ailemize katılabilirsiniz. Kanalıma ulaşmak için BURAYA TIKLAYABİLİRSİNİZ

Bu yazımızda anlattığım konu ile ilgili yapamadığınız yada kafanıza takılan her soruyu sitemizin yorum kısmına yazarak cevap bulabilirsiniz.

Leave a Reply