Uzmanına Sor

Archive for the ‘delegates’ tag

VISUAL C# – DELEGATES AND EVENTS – PART II: Event Handler

with one comment

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.

     

     

     

     

     

     

    Written by Serkan Hekimoğlu

    January 18th, 2010 at 11:47 am

    Posted in .NET, C#

    Tagged with , , ,

    VISUAL C# – DELEGATES AND EVENTS – PART I: Delegates

    without comments

    Bugunku makalemizde sizlerle Temsilciler (Delegates) hakkinda incelemede bulunup, ornek yapacagiz. Temsilciler (Delegates) her ne kadar ileri derece bir kavram olsada her seviyeden C# ile ugrasan kisilerin bilmesi gereken bir yapidir. Tabii ki Delegates kullanmadan bir projeyi yapabilirsiniz. Fakat o zaman yapamayacaginiz isler, yapabilecekleriniz onune gecer.

    Delegates bir projede bir veya birden fazla methodu gosteren bir referans turunden bir nesnedir. Delegates’i kullanamaya baslamadan once tipki bir method tannimlar gibi, delegate’imizin tanimlamasini yapariz. Delegates 2 islem arasinda anahtar gorevi gorur.

    image (C-Sharp Nedir’den alintidir)

     

    Delegates’i size anlatmak icin kullanacagim ornektenten biraz bahsedeyim. Gunluk yasantimizda Delegates’in yaptigi ise verebilecegim en iyi ornek, Lamba ve Lambayi calistiran Dugmedir. Dugme, lambanin yanmasini tetikleyen bir anahtardir(aradaki kablo vasitasi ile). Bunu ornegimizde daha iyi anlayabiliriz. Ornegimize baslarken Ampul ve Dugme’ icin Class yazalim.

    Ampul Class’i :

    public class Ampul
        {
            private string Marka_;
            public string Marka
            {
                get { return this.Marka_; }
                set { this.Marka_ = value; }
            }
    
            public Ampul(string AmpulMarka)
            {
                this.Marka_ = AmpulMarka;
            }
    
            public void BagliBulundugumDugmeyeBasildi(DugmeDurumu Sinyal)
            {
                if (Sinyal == DugmeDurumu.Acik)
                {
                    System.Windows.Forms.MessageBox.Show(this.Marka_ + " ampülü yanıyor !");
                }
                else if (Sinyal == DugmeDurumu.Kapali)
                {
                    System.Windows.Forms.MessageBox.Show(this.Marka_ + " ampülü yanmıyor !");
                }
            }
        }

    Dugme Class’i:

    public class Dugme
        {
    
            public event KabloDelegate SinyalGeldi;
    
            private DugmeDurumu DugmeninAnlikDurumu_ = DugmeDurumu.Kapali;
    
            public DugmeDurumu DugmeninAnlikDurumu
            {
                get { return this.DugmeninAnlikDurumu_; }
            }
    
            private KabloDelegate DugmeBaglantiKablosu = null;
    
            public void AcKapat()
            {
                if (this.DugmeninAnlikDurumu_ == DugmeDurumu.Kapali)
                {
                    this.DugmeninAnlikDurumu_ = DugmeDurumu.Acik;
                }
                else
                {
                    this.DugmeninAnlikDurumu_ = DugmeDurumu.Kapali;
                }
    
                if (SinyalGeldi != null) SinyalGeldi(this.DugmeninAnlikDurumu_);
            }
        }

    Dugme durumunu belirtmek icin Enum kullanalim:

     public enum DugmeDurumu
        {
            Acik,
            Kapali
        }

     

    public void AcKapat()
            {
                if (this.DugmeninAnlikDurumu_ == DugmeDurumu.Kapali)
                {
                    this.DugmeninAnlikDurumu_ = DugmeDurumu.Acik;
                }
                else
                {
                    this.DugmeninAnlikDurumu_ = DugmeDurumu.Kapali;
                }
    
                if (SinyalGeldi != null) SinyalGeldi(this.DugmeninAnlikDurumu_);
            }

    Ve en onemlisi anahtar gorevi gorecek olan Delegate’imizi tanimlayalim:

    public delegate void KabloDelegate(DugmeDurumu dgm);

     

    Simdide sira FormLoad’a yazilacak kodlarda:

    private void SerkanHekimogluDelegates_Load(object sender, EventArgs e)
            {
                Ampul amp = new Ampul("Birinci Ampul");
                Ampul amp2 = new Ampul("Ikinci Ampul");
    
                Dugme dgm = new Dugme();
    
                dgm.SinyalGeldi += new KabloDelegate(amp.BagliBulundugumDugmeyeBasildi);
                dgm.SinyalGeldi += new KabloDelegate(amp2.BagliBulundugumDugmeyeBasildi);
    
                dgm.AcKapat();
            }

     

    Formumuzu Run ettigimizde, Form Load’a koydugumuz Temsilcilerimizin, tanimlamis oldugu Joblari yaptigini goreceksinizdir.

     

    Eventler hakkinda bilgiyi ve ornegi ikinci makalemizde yapacagiz.

     

     

     

    Written by Serkan Hekimoğlu

    January 18th, 2010 at 11:21 am

    Posted in .NET, C#

    Tagged with , , ,