C# TA DELEGATE (TEMSİLCİ) KAVRAMI

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”);

        }

        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.)

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.

2 comments

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

Leave a Reply

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