5
Oca'15

Bonus: C# ile Delegate ve Event Kavramları (.NET, C#, C# ile OOP)

Delegeler(delegates) ve olaylar(events), bir durumun gerçekleştiği zamanda bir şeyler yapabilmemize imkan sağlarlar. Bu, her zaman örnek verilen butona tıklanması veya bir propertynin değerinin değişmesi, yeni bir nesne yaratılması gibi her türlü durum olabilir.

 

Kod normal akışında satır satır işlenir. Biz ise, delegate veya event kullanarak programın çalışma anında bu akışa ortak olan kod blokları oluşturabilmekteyiz. Event, delegelerin özelleşmiş bir halidir.

 

Delegeleri açıklamaya çalışarak devam edelim.

Delegates

Delegeler, bir veya birden fazla fonksiyonu işaret eden işaretçilerdir. Tanımlarında, işaret edebilecekleri fonksiyonların yapılarını barındırırlar.

public delegate int SomeDelegate(string someString);

Yukarıdaki tanımdan “delegate” anahtar kelimesini çıkardığımızda bir fonksiyon tanımından farkı olmadığını görebilirsiniz. Bu delege için public erişim belirleyicisi kullandık. Biliyoruz ki erişim belirleyiciyi burada belirtmeseydik varsayılan olarak private olacaktı.

 

Yine bu yukarıdaki tanım bize, SomeDelegate isimli delegenin, integer tipinden değer döndüren ve parametre olarak bir adet string alan fonksiyonları işaret edebileceğini söylüyor. Madem delegemiz böyle fonksiyonları işaret edebiliyor o zaman biz de böyle bir fonksiyon tanımlayıp nasıl işaret edebileceğine bakalım.

public int SomeFunction(string someString)
{
    ...
}

Delegemizin bu fonksiyonu işaret etmesi için ise aşağıdaki kodu yazmamız gerekiyor:

SomeDelegate someDelegate = new SomeDelegate(SomeFunction);

Tanımladığımız delege tipinden, SomeFunction fonksiyonunu işaret eden bir delege belleğe çıkardık. Bu kod satırından sonra bu delege bellekte yaşadığı sürece ona yeni fonksiyonları da işaret ettirebiliriz. Böylece bu delege birden fazla fonksiyonu işaret etmiş olur.

someDelegate += new SomeDelegate(OtherFunction);

Buradaki OtherFunction fonksiyonunun da interger tipte değer döndürüp bir adet string parametre alan bir fonksiyon olmak zorunda olduğunu unutmayalım.

 

Dikkatinizi “+=” operatörü çekmiş olmalı. Bu operatör ile delegenin daha önceden işaret ettiği fonksiyonları çıkarmadan yeni bir fonksiyonu da işaret etmesini sağladık. “+=” haricinde “-=”, “=” operatörleri de kullanılabilir.

Yeni makaleleri E-Mail ile takip edin!