C# ta Delegeler

Delegeler

Delegeler,  .Net içerisinde önemli bir yere sahip olan, herhangi bir Class içerisinde yazilmis olan methodlari kolayca çagirabilmek için kullanilan bir yöntemdir. Delegeler konusunu yeni ögrenen birinin aklinda genel olarak su soru vardir? Neden delege? Delegesiz olmaz mi? Tabii ki olur. AMA…

Yemek yapilacak! ve herhangi bir yemegi yapma sürecinde 20 farkli is olabilecegini düsünün. Kimi yemek 1, 3, 5, 7, 17 . adimlarla piser, kimi yemek 11,15,13,10,20,19. Adimlarla piser(Bu adimlarin sizin projenizdeki methodlar oldugunu düsünün). Iste Delegelerin en fazla kullanim alanlarindan birisi budur. Methodlarinizi ayni anda istege bagli çalistirmaktir. Istenildigi zaman yeni methodlar eklemek ve bir YAPILACAKLAR LISTESI olusturmak, istenildigi zaman mevcut methodlari YAPILACAKLAR LISTESInden çikarmak.

Peki bu islem Delegesiz olmaz miydi? Tabii ki olurdu ama her islemde yapilacak islemleri ayri ayri, alt alta yazmaniz gerekirdi. Yani Delegeler Kullanim kolayligi da olusturur.

Delegeleri anlama konusunda sikinti çektiginiz anda yukaridaki açiklamalari tekrar okuyunuz.

Basit Delege Tanimlamalari (Delegelerle Method Çagirmak)

Bir adet Windows Form Projesi olusturunuz ve projenize bir adet KullaniciBilgileri.cs isimli bir Class ekleyiniz. Asagidaki Kodlari ekleyiniz.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows.Forms; //Sizde Ekleyiniz…

namespace WindowsFormsApplication15

{

    class KullaniciBilgileri

    {

        //Degiskenler tanimlandi…

        public string adi = “Mehmet Salih Deveci”;

        public string email = “[email protected]”;

        public string sehir = “Şanlıurfa”;

        //3 Adet Parametresiz Method tanimlandi…

        public void AdGetir()

        {

            MessageBox.Show(adi);

        }

        public void EmailGetir()

        {

            MessageBox.Show(email);

        }

        public void SehirGetir()

        {

            MessageBox.Show(sehir);

        }

        public delegate void KullaniciBilgileriGetir();

        public KullaniciBilgileriGetir YavruDegisken;

    }

}

 

Burada;

public delegate void KullaniciBilgileriGetir(); ile delege olusturmaya dair imza olusturuldu. Imzayi anlamak önemli…

Public – Diger Classlardan ulasilabilmeyi saglar.

Delegate – Delege olusturuldu.

void KullaniciBilgileriGetir(); – Class içerisinde parametresiz ve Prosedür olan methodlar için delege olusturulacagi anlamina gelir. Eger parametremiz olsa idi parantezler() içerisine veri türünü de yazmamiz gerekirdi.           

public KullaniciBilgileriGetir YavruDegisken; ile Delegemize yavru degiskenle ulasabilmeyi amaçliyoruz.

 

Formunuza bir adet buton ekleyiniz ve butonun Click eventine geliniz. Delegemizi kullanalim.

        KullaniciBilgileri yeni = new KullaniciBilgileri();

        private void button1_Click(object sender, EventArgs e)

        {

            yeni.YavruDegisken = yeni.AdGetir;

            yeni.YavruDegisken();

        }

 

Burada;

KullaniciBilgileri yeni = new KullaniciBilgileri(); ile Classimiza ulasabilmek için yavru degisken türettik. 

yeni.YavruDegisken = yeni.AdGetir; ile delegemizin kullanacagi methodu belirledik. Kullanimina dikkat ediniz. 

yeni.YavruDegisken(); ile delegeyi, daha dogrusu delegenin temsil ettigi methodu çalistiriyoruz.

Delegeler ile Methodlarimizi Toplamak – Çikarmak

Delegeler ile methodlarinizi toplayip çikararak konunun en basinda anlattigim yemek tarifine benzer yapilar olusturabilirsiniz. Çok daha güzel,kolay ve nesnel olmaz mi?

Simdi Formunuza 3 adet daha buton ekleyip 3 butondan herhangi birinin Click eventine ve daha sonra digerlerine asagidaki kodlari yaziniz. Sirasiyla butonlara tiklayiniz.

        //Sadece AdGetir isimli method çalisir.
        private void button2_Click(object sender, EventArgs e)

        {

            yeni.YavruDegisken += yeni.AdGetir;

            yeni.YavruDegisken();

        }      

        //Hem AdGetir hem de EmailGetir methodlari çalisir. Çünkü methodlar toplandi.
        private void button3_Click(object sender, EventArgs e)

        {

            yeni.YavruDegisken += yeni.EmailGetir;

            yeni.YavruDegisken();

        }      

        //Sadece EmailGetir methodu çalisir. Çünkü AdGetir Methodu çikarildi.

        private void button4_Click(object sender, EventArgs e)

        {

            yeni.YavruDegisken -= yeni.AdGetir;

            yeni.YavruDegisken();

        }

 

Delegeler ile Kontrollere Ait Eventlere Eklemeler Yapmak

 

KullaniciBilgileri.Cs Classiniza asagidaki kodu ekleyiniz

 

        public void EklemeYap(object Gonderen,EventArgs deger)

        {

            MessageBox.Show(“Bu kisim sonradan eklendi…”);

        }

 

Formunuza Load eventine asagidaki kodu ekleyiniz.

 

        private void Form1_Load(object sender, EventArgs e)

        {

            button2.Click += yeni.EklemeYap;

        }

 

Bu sekilde Buton1’in Click eventi ne yaparsa ardindan  EklemeYap isimli method çalisir.

Diger yazilarimda görüsmek üzere.


Mehmet Salih Deveci

Yazılım Mühendisi

About Mehmet Salih Deveci

I am Founder of SysDBASoft IT and IT Tutorial and Certified Expert about Oracle & SQL Server database, Goldengate, Exadata Machine, Oracle Database Appliance administrator with 10+years experience.I have OCA, OCP, OCE RAC Expert Certificates I have worked 100+ Banking, Insurance, Finance, Telco and etc. clients as a Consultant, Insource or Outsource.I have done 200+ Operations in this clients such as Exadata Installation & PoC & Migration & Upgrade, Oracle & SQL Server Database Upgrade, Oracle RAC Installation, SQL Server AlwaysOn Installation, Database Migration, Disaster Recovery, Backup Restore, Performance Tuning, Periodic Healthchecks.I have done 2000+ Table replication with Goldengate or SQL Server Replication tool for DWH Databases in many clients.If you need Oracle DBA, SQL Server DBA, APPS DBA,  Exadata, Goldengate, EBS Consultancy and Training you can send my email adress [email protected].-                                                                                                                                                                                                                                                 -Oracle DBA, SQL Server DBA, APPS DBA,  Exadata, Goldengate, EBS ve linux Danışmanlık ve Eğitim için  [email protected] a mail atabilirsiniz.

Leave a Reply

Your email address will not be published. Required fields are marked *