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.
Simdi makaleleri taniyalim ve 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.vb isimli bir Class ekleyiniz. Asagidaki Kodlari ekleyiniz.
|
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports System.Windows.Forms //Sizde Ekleyiniz.
Namespace WindowsFormsApplication15
Class KullaniciBilgileri
'Degiskenler tanimlandi…
Public adi As String = "Engin Demirog"
Public email As String = "engin@e-learner.net"
Public sehir As String = "Ankara"
'3 Adet Parametresiz Method tanimlandi…
Public Sub AdGetir()
MessageBox.Show(adi)
End Sub
Public Sub EmailGetir()
MessageBox.Show(email)
End Sub
Public Sub SehirGetir()
MessageBox.Show(sehir)
End Sub
Public Delegate Sub KullaniciBilgileriGetir()
Public YavruDegisken As KullaniciBilgileriGetir
End Class
End Namespace
|
Burada;
Public Delegate Sub KullaniciBilgileriGetir() ile delege olusturmaya dair imza olusturuldu. Imzayi anlamak önemli…
Public – Diger Classlardan ulasilabilmeyi saglar.
Delegate – Delege olusturuldu.
Sub 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 YavruDegisken As KullaniciBilgileriGetir ile Delegemize yavru degiskenle ulasabilmeyi amaçliyoruz.
Formunuza bir adet buton ekleyiniz ve butonun Click eventine geliniz. Delegemizi kullanalim.
|
Private yeni As New KullaniciBilgileri()
Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs)
yeni.YavruDegisken = yeni.AdGetir
yeni.YavruDegisken()
End Sub
|
Burada;
Private yeni As 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 Sub button2_Click(ByVal sender As Object, ByVal e As EventArgs)
yeni.YavruDegisken += yeni.AdGetir
yeni.YavruDegisken()
End Sub
'Hem AdGetir hem de EmailGetir methodlari çalisir. Çünkü methodlar toplandi.
Private Sub button3_Click(ByVal sender As Object, ByVal e As EventArgs)
yeni.YavruDegisken += yeni.EmailGetir
yeni.YavruDegisken()
End Sub
'Sadece EmailGetir methodu çalisir. Çünkü AdGetir Methodu çikarildi.
Private Sub button4_Click(ByVal sender As Object, ByVal e As EventArgs)
yeni.YavruDegisken -= yeni.AdGetir
yeni.YavruDegisken()
End Sub
|
Delegeler ile Kontrollere Ait Eventlere Eklemeler Yapmak
KullaniciBilgileri.vb Classiniza asagidaki kodu ekleyiniz
Formunuza Load eventine asagidaki kodu ekleyiniz.
|
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)
button2.Click += yeni.EklemeYap
End Sub
|
Bu sekilde Buton1’in Click eventi ne yaparsa ardindan EklemeYap isimli method çalisir.
Diger yazilarimda görüsmek üzere.
Engin Demirog
engin@zirvedekibeyinler.net
www.yazilimdevi.com