22 Temmuz 2010 Perşembe

C#'da Event Kavrami

Delegelerde de anlattigimiz gibi eventler C# icerisinde buyuk bir oneme sahiptir. Yaptigimiz tum isler aslinda arka planda eventlerin tetiklenmesi sonucu yapilmasi istenilen gorevlerin yapilmasi sonucunda ortaya cikar. Visual Studio sagolsun cogu eventi kendi hazir veriyor, bize sadece yapilmasi istenen goreve gore kod yazmak dusuyor. Simdi biz de kendi eventimizi kendimiz yaratarak bu islemlerin arka planda nasil gerceklestigini inceleyelim.
Senaryomuz basitce soyle olsun. Degiskenleri hic uzatmadan basit bir ornek uzerinden gidiyorum. Stok takip programimiz olsun. Degisken olarak sadece int stok olsun ve stok sayimizi 5er 5er azaltalim. Stok sayisi 10un altina dustugu andan itibaren bize stok azaliyor uyarisini versin. Amacimiz bu. Normalde nasil bir yaklasim uygulanir, if bloklarini yazarsiniz 10dan kucukse sunu yaptir, degilse sunlari yaptir vs. Event tabanli programlamayi kullanarak yapinca daha profesyonel bir yapi olusturmus olacagiz. Aslinda Event'lerin gucunu kavramak icin basit bir ornek bu, daha komplike bir sorunla karsilastigimizda eventlerin gercek gucunu goruruz ama simdilik biz hem hatirlatma maksatli, hem de bilmeyenler icin ogrenme maksatli ufak bir program yazalim.



namespace Event_App_
{
    class Program
    {
        static void Main(string[] args)
        {
            Urun urn = new Urun(50);
            urn.KatDegisti += new Temsilci(urn_KatDegisti);
            for (int i = 0; i < 10; i++)
            {
                urn.StokDurumu();
            }
        }
        static void urn_KatDegisti()
        {
            Console.WriteLine("Stok bitmek uzere...");
        }
    }
    delegate void Temsilci();
    class Urun
    {
        private int stok; 
        public event Temsilci KatDegisti; 
        public int Stok
        {
            get { return stok; }
            set
            {
                stok = value;
                if (value <= 10 && KatDegisti != null)
                    KatDegisti.Invoke();
            }
        }
        public Urun(int stok)
        {
            Stok = stok;
        }
        public void StokDurumu()
        {
            Stok -= 5;
            Console.WriteLine(Stok);
        } 
    }
}

3 yorum:

Adsız dedi ki...

Çok sade bi kadarda güçlü bir örnek.
Teşekkürler.

Ahmet Refik ÖZBEK dedi ki...

Anlasilir bir ornek olmus cok tesekkurleetesekkurler..

Unknown dedi ki...

form ekranın da bu örneği yaparmısınz