20 Temmuz 2010 Salı

C#'da Delegeler(Delegates)

Method'larimiz calisma aninda RAM'de yer tutarlar, dolayisiyla bir metodun RAM'deki baslangic adresi soz konusudur. Delegeler kisaca, metotlarin bu baslangic adreslerini tutabilen nesnelerdir. Peki biz nerelerde kullanacagiz bunlari. Madde madde siralama yapmadan once kisaca aklima gelen ilk ornegi vereyim. Bir stok takip programiniz var ve stok miktariniz 50nin altina dusunce uyari vermesini istiyorsunuz. Ya da baska gorevler de verdirebilirsiniz. Iste burada delegeleri rahatlikla kullanabiliriz. Yani o metodun calismasi icin(gorev verdigimiz) tetiklenecek bir olay gerekiyor. Iste bunu delegeler yardimiyla yapiyoruz. Aslinda burada farkinda olmadan delegelerin event programlamada kullanildigini belirttik.
Delegelerin Framework icinde yogun kullanildigi yerler;
1-Event tabanli programlama
2-Asenkron programlama
3-LINQ

Simdi kisaca delegelerin nasil tanimlandigini ve baglama islemlerinin nasil yapildigini inceleyelim.
delegate int Temsilci(int a);

Ustteki delege bize, int parametresi alip geriye int donduren bir metodun adresini tutacagini soyler.
Not: Yazdigimiz metodun private ... vs. olmasi onemli degil. Hangi tur erisim belirleyicisine sahip olursa olsun delegelerin tanimlanma bicimi bu sekilde olacak.

Temsilci t = new Temsilci(KareAl);
t += KupAl;
ConsoleWriteLine(t.invoke(5)); // a=5 icin delegelerin cagrilmasi.

Metotlarimiz ise su sekilde;

static int KareAl(int a)
{
return a * a;
}
static int KupAl(int a)
{
return a * a * a;
}

Yukaridaki sonuca gore ciktimiz 25 ve 125 olacaktir. Bir sonraki makalemizde, event tabanli programlamayi anlattigimizda daha da anlasilir olacaktir bu yazdiklarimiz.

0 yorum: