Merhabalar ,

Kod yazarken bazen bilinçli olarak bazende farketmeden çoğu noktada event leri kullanırız. Örneğin formun üzerine sürükletip attıgımız bir butonu click lerken veya uygulamayı f5 ile ilk çalıştırdıgımızda arka tarafta aslında bir eventi tetikleriz ve o  tetiklenen evente bağlı olarak oluşturfugumuz delege üzerinden yazdığımız methodu çalıştırırız.Bu verdiğim örnekler en çok karşımıza çıkan senaryolar ama bazen bir eventi bizim tetiklememiz gereken durumlar olabilir.Bugunde böyle bir örnek senaryo üzerinden giderek bir uygulama geliştirmek ve paylaşmak istiyorum ;

 Örnek senaryomuzda , Urun isminde bir class ımız olacak ve bu Class ın StokSayisi isminde int bir property si olacak.Stok sayisi arttırıldıgında StokEklendi isminde bir event tetiklenecek , Stok sıfırın altına düştüğünde ise StokBosaldi isminde başka bir event tetiklenecek.Bu iki işlemin gerçekleşme zamanlarını ise Ayrı bir argüman sınıfına kaydedip , eventlere bağlı olan methodlara parametre olarak vereceğiz.Kodları yazdıgımızda herşey daha anlaşılır olacak.Öyleyse başlayalım Smile

Öncelikle StokEventArgs sınıfını yazmak istiyorum. Bu sınıf EventArgs sınıfını base alan bir sınıf olacak.

 Şimdide Urun sınıfını yazmaya başlayalım ;

 

Öncelikli olarak class ın üzerinde bir seviyede bir delege oluşturdum.Bu delege bize şunu ifade ediyor.Ben geri dönüş tipi void olan ve object parametre ve StokEventArgs tipinden parametre alan methodları temsil ediyorum, benim üzerimden oluşturdugun event ler ile bu methodları yakalayabilirim.Daha sonrada StokEklendi ve StokBosaldi event lerimizi tanımladık.Event her zaman delegenin tipiyle aynı tanımlanır.delege olmadan bir event asla tanımlanamaz.Daha sonrada constructor ın içinde stoksayisi değişkeninde 0 değerini atadım.

 

Şimdi sıra geldi bu eventleri tetiklemeye.Eventlerimi tetiklemek için 2 tane ayrı method yazacagım.Bu methodlar stokun eklendiği ve bolaşdıgı anlarda çalışacak ve eventleri tetikleyecek.Eventleri tetikelemeden önce event in null olup olmadıgını kontrol edeceğiz çünkü bu evente bağlı olarak oluşturulmuş method olmayabilir.Yoksa null dönecek ve hata verecektir.

 

 

yukarıdaki kodda this ile Stokun eklendiği ve Boşaldıgı anlarda class ımızı parametre olarak yolladık.Bu eventleri kullanırken , ulaşabileceğiz.Şimdi ise Stokun eklendiği ve boşaldıgı anlarda bu methodları çalıştırmak kaldı geriye.Bunun için stokSayisi değişkenini class dışından kullanıma açacak bir propery ye ihtiyacım var.

 

 evet herşey tamam.Şimdi bir windows forms uygulaması üzerinde bu class ı test edebiliriz.

Öncelikle oluşturacagım methodları event lere ekliyorum.Bunu yaparkende aracı olarak bir delege kullanıyorum.Artık bundan sonra eventlere ait methodlarımı doldurup kullanacağım;

 

 

 Mesela stok'a bir ürün ekleyeyim ;

 

veya stoku bolaştayım. instance alındıgında 0 oldugu için -1 demem stoğu boşaltacak ;