C# Dersleri 30 - Delegate Kullanımı

     C# dilinde skaler data tiplerinin yanında referans data tipleri(reference type) de olduğundan daha önceki makalelerde bahsetmiştik. Delegate, method referansları tutabilen bir referans tiptir. C veya C++ dillerindeki function pointerlara benzerler. Birçok kullanımı vardır. Örneğin tipi ve parametreleri aynı olan birden fazla method çağrılacaksa, delegate kullanılabilir.

     Delegate Tanımlamak

     Delegate tanımı sırasında, bu delegatenin referans olabileceği methodların dönüş tipini ve parametresini de belirtmemiz gerekir. Örneğin;     

public delegate void DelegateDeneme(string s);

     DelegateDeneme adında oluşturduğumuz delegatenin referans olabileceği methodlar; void tipinde ve string parametre alan methodlar olmalıdır.      

public delegate void DelegateDeneme(string s);
private void btnClick_Click(object sender, EventArgs e)
{
    DelegateDeneme dd = new DelegateDeneme(ShowMessage);
    dd += ShowOtherMessage;
    dd("Merhaba");
}

void ShowMessage(string msg)
{
    MessageBox.Show(msg);
}

void ShowOtherMessage(string otherMsg)
{
    MessageBox.Show(otherMsg + " test");
}

     İki tane void method oluşturuyorum. İkisinin de bir adet parametresi var ve string tipinde. Dolayısıyla iki method da DelegateDeneme'ye uygun. Kullanıcı butona tıklayınca olacak işleme bakalım.

     Önce DelegateDeneme'nin yeni bir nesnesini türetiyoruz. Normal bir classın nesnesini türetir gibi. dd isminde değişkeni oluşturuyoruz ancak new DelegateDeneme() şeklinde tanımlama yaparken parantezler içine void ve string parametreli bir method ismi yazmamı istiyor. Tanımlamayı yaptıktan sonra ikinci methodu eklemek için de dd+=ShowOtherMessage; kod cümlesini kullanıyorum. Burada dikkat edilmesi gereken nokta; referans edilecek methodları belirtirken "( )" kullanmıyoruz. Çünkü delegateye yalnızca method isimlerini veriyoruz. Daha sonra da dd değişkeni sanki bir methodmuş gibi parantez açıp bu iki methoda birden gönderilecek parametreyi yazıyoruz. Benim örneğimde iki methoda da parametre olarak "Merhaba" göndermiş olduk. Yani kullanıcı butona tıkladığında önce ShowMessage methodu çalışmış olacak ve MessageBox'ta "Merhaba" yazacak. Daha sonra ShowOtherMessage methodu çağrılacak ve MessageBox'ta "Merhaba test" yazacak.

     "İki tane methodu çağırırım arka arkaya delegateye ne gerek var ki o zaman?" diye düşünmeyin. Sonraki makalelerde de kullanacağımız tonla yer olacak.

     Projeyi buradan indirebilirsiniz.

YORUMLAR
Email Adresi *
Görüntülenecek İsim *
Yorum *
Paylaş
  • f