VISUAL C# – DELEGATES AND EVENTS – PART II: Event Handler
EventHandler aslında bir metod değil bir delegedir. event deklerasyonunda kullanıldığında yeni event artık bir EventHandler delegesi gibi davranır. Bu demektir ki event’e ancak EventHandler’da belirtilen type’da metod bağlanabilir. Bu yeni metodların returnType’ı ve Signature’ı da haliyle <void> <object, EventArgs> olacaktır.
Bu yüzden listeye eklenecek metodların EventHandler delegesiyle uyumlu olması gerekir.
- Bir event objesi yaratıldığında new kullanılmaz,
- event declare class içinde yapılır,
- event’ler çalıştırılabilir bir kod bloğunun içinde declare edilemezler.
Event Handler ile yapmak istedigim ornek, bir insanin bir yiyecek yemesi. Olusturmak istedigim classlar, Insan, Meyve, ve Meyvenin icerisindeki vitamin class’i.
public class Meyve { private string MeyveAdi_; public string MeyveAdi { get { return MeyveAdi_; } set { MeyveAdi_ = value; } } }
public class VitaminDegerleri { public VitaminDegerleri(int C, int D) { this.CVitamini_ = C; this.DVitamini_ = D; } private int CVitamini_; public int CVitamini { get { return CVitamini_; } set { CVitamini_ = value; } } private int DVitamini_; public int DVitamini { get { return DVitamini_; } set { DVitamini_ = value; } } }
public class Insan { public event MeyveYedimEventHandler MeyveYedim; private Meyve OdamdakiMeyve = null; public void SerkaninGetirdigiMeyveyiAl(Meyve SerkaninVerdigiMeyve) { this.OdamdakiMeyve = SerkaninVerdigiMeyve; } public void MeyveyiYe() { MessageBox.Show(this.OdamdakiMeyve.MeyveAdi + " yedim !"); if (this.MeyveYedim != null) MeyveYedim(new VitaminDegerleri(34, 57)); } }
Ve Eventimiz icin kullanlicak delegate:
public delegate void MeyveYedimEventHandler(VitaminDegerleri vtm);
Eventimizi tetikleyecek olan method ise su sekildedir:
void Ins_MeyveYedim(VitaminDegerleri e)
{
}
Simdi sirada Form_Load’da kullanilacak kodlarimiz var:
private void SerkanHekimogluEvents_Load(object sender, EventArgs e) { Insan ins = new Insan(); ins.MeyveYedim += new MeyveYedimEventHandler(Ins_MeyveYedim); Meyve myv = new Meyve(); myv.MeyveAdi = "Elma"; ins.SerkaninGetirdigiMeyveyiAl(myv); ins.MeyveyiYe(); }
Event kullanimida, gordugunuz uzere Delegates kadar kolay. Sorulariniz icin bana iletisim bolumunden ulasabilirsiniz.













benim bi sorum olacaktı.
c# ta bir fonksiyonum var ve veri tabanına bağlanıp veri çekiyor bense o veri çekme işlemi sonuşlanana kadar loading tarzı bişeyler yapmak istiyorum acaba ne kullanmam gerekiyor??
Mehmet
28 Apr 10 at 00:21