C# TA DELEGATE (TEMSİLCİ) KAVRAMI

Yayınlandı: Haziran 18, 2010 / C#
Etiketler:, , , , , , ,

Delege, nesneler arası haberleşmeyi sağlamak, haberleşmeyi sağlayan yapının daha üst seviyede  olmasını ve daha az kod yazmamızı mümkün kılar. Akla gelen soru, Peki Delege olmadan olmaz mı? Tabi ki olur daha fazla kod yazarak bu işi halledebilirsiniz.

Delegate .NET içerisinde önemli bir yere sahiptir.Kuşkusuz ilerliyen kısımlarda göreceğiz.

Delege hakkında biraz daha açılım yapacak olursak  tetikçidir. Kendisine  hedef veya hedefler eklenebilir  ayni zamanda kendisine verilen  hedef veya hedefler çıkartılabilir, alınacak kararlar için önceden hazırlıklı olmak gerekmez.

Not: Delegate tanımlamaları işlem görülecek method ile ayni türden olmalıdır. Aldığı parametreler ve geriye dönüş değeri

Delege tanımı,

<Erişim Belirleyicisi>  delegate  <Geri dönüş tipi> <Temsilci ismi>(Varsa parametre);                                                                                     

public delegate void BildigimDilDelegate();

public delegate int ToplamaDelegate(int sayi1,int sayi2);

2 farkli delege tanimi yaptik.Geriye deger dönderen ve dondermeyen.Parametre alan ve almayan.

Ornek  bir uygulama ile basliyacak olursak.

public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        //Olusturmus oldugum delege kullanmak istedigim methodla ile ayni ozelliklere sahiptir.

        //Tetikci

        public delegate void BilgiDelegate();

        public BilgiDelegate BilgiHavuzu;

        //Görev 1

        void Adi()

        {

            MessageBox.Show(“SALİH DEVECİ“);

        }

        //Görev 1

        void WebSite()

        {

            MessageBox.Show(“https://www.salihdeveci.wordpress.com&#8221;);

        }

        private void button1_Click(object sender, EventArgs e)

        {

            BilgiHavuzu += new BilgiDelegate (Adi);

            BilgiHavuzu += new BilgiDelegate (WebSite);

            //Buraya kadar olan kisimda +=  ile tetiklenmesi gereken methodlar Eklendi.Artik 2 Method sirasi ile calisacaktir.

            BilgiHavuzu -= Adi; 

            //-= ile icerisindeki method cikartildi.

            //Burada Adi Methodu ,gorevler arasindan cikartilmistir.

            BilgiHavuzu.Invoke(); 

            //Invode Methodu ile tetikciye verilen gorevleri harekete gecirdik.

        }

    }

Aslinda yukaridaki örnekte delegeler neden kullaniliyor amaci tam olarak verilmedi.Sadece bir delege nasil olusturuluyor ve bir delegeye yapilmasi gereken işler nasil veriliyor yada nasil cikartiliyor bunu gostermekteti amac.Simidi delege’yi neden kullaniyoruz sorusuna cevap veren ornegimizi yapalim.

Örnek uygulama , Bildigimiz yazilim dillerini soran coklu secim yapilabilecek bir aneket yapalim.C#,Java,Pascal,Delphi , Her bir dil kendi methodu ile  cevap versin.Peki Secmis Oldugum Diller Arka tarafta nasil dinamik olarak tetiklenicek? Sorusu devaminda….

Tasarim sekildeki gibidir.

  public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        public delegate void BilgiDelegate ();

        private BilgiDelegate Diller;

        private void button1_Click(object sender, EventArgs e)

        {

            if (Diller != null)

            {

                Diller.Invoke();

            }

        }

        public void Csharp()

        {

            MessageBox.Show(“C#”);

        }

        public void Delphi()

        {

            MessageBox.Show(“Delphi”);

        }

        public void Pascal()

        {

            MessageBox.Show(“Pascal”);

        }

        public void Java()

        {

            MessageBox.Show(“Java”);

        }

        private void cCsharp_CheckedChanged(object sender, EventArgs e)

        {

            if (cCsharp.Checked)

            {

                Diller += new BilgiDelegate (Csharp);

            }

            else

            {

                Diller -= Csharp;

            }

        }

        private void cJava_CheckedChanged(object sender, EventArgs e)

        {

            if (cJava.Checked)

            {

                Diller += new BilgiDelegate (Java);

            }

            else

            {

                Diller -= Java;

            }

        }

        private void cPascal_CheckedChanged(object sender, EventArgs e)

        {

            if (cPascal.Checked)

            {

                Diller += new BilgiDelegate (Pascal);

            }

            else

            {

                Diller -= Pascal;

            }

        }

        private void cDelphi_CheckedChanged(object sender, EventArgs e)

        {

            if (cDelphi.Checked)

            {

                Diller += new BilgiDelegate (Delphi);

            }

            else

            {

                Diller -= Delphi;

            }

        }

    }

Diller delegesini bir havuz gibi düşünebilirsiniz . CheckBox ‘larin Checked’larini kontrol ederek Diller havuzuna secili methodlari  ekleyip cikartabiliyorum,yani uygulamada dinamik bir sekilde methodlari tetikletebildim.Gereksiz gere kod yazmamin önüne gectim.Karar yapilarindan kurtardı.Uygulamayi daha iyi anliyabilmek icin birde delege kullanilmadan yapmaya calisin.(Tabi Butun olasılıkları düşünerek gereğinden fazla method olusturmakla basliyabilirsiniz.)

Reklamlar
yorum
  1. ilteriş MUTLU dedi ki:

    Çok güzel açıklanmış. Teşekkürler…

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s