Search

C# Events Kullanımı



0 yorum

C# Events Kullanımı

olaylar ve delegelerÖnceki yazımda Delegelerden(Delegate) bahsetmiştim, delegeler metodları dolaylı olarak başlatmamıza izin verirler. Metodları başlatmamız için delegeyi açık bir şekilde başlatmamız gerekir. Ancak bazı durumlarda biz başlatmasakta metodun kendiliğinden çalışmasını isteyebiliriz. İşte bu gibi durumlarda Event kullanmamız gerekir. Örneğin bir cihazın şarjı bitmek üzereyse ışığının otomatik olarak kısılmasının sağlanması yada aşırı ısınmış olan bir cihazda uygulamanın kapatılmasını sağlamak gibi durumlar düşünülebilir.

Event kavramı bir çok yerde karşımıza çıkmaktadır, bunlara örnek olarak bir butona tıklanması veya mouse ile sağ click tıklanması gibi olaylar gösterilebilir.
Event bildirirken, öyle bir sınıf tasarlamalıyız ki uygulamada istediğimiz yerleri izlesin ve olağan dışı yada önemli bir durum olduğunda Event çağırabilsin.
Bir Event tanımlarken türü delegate olmalı ve event anahtar sözcüğü kullanmalısınız.

Event sözdizimi: event DelegateAdı EventAdı


Event Yazalım

Şimdi kendi Event tanımımızı yazıp kullanalım, örneğimizde fabrikada çalışan bir personelin o günkü vardiya durumunu(günden yola çıkarak) kontrol eden bir Event yazalım. Personelin vardiya numarasını girmesiyle birlikte Event çalışacak ve ekrana vardiya durumu yazdırılacaktır. Örneğin pazartesi, çarşamba, cuma günleri gece vardiyası, salı, perşembe ve cumartesi günleriyse gündüz vardiyası olsun. Pazar günü de tatil olarak gösterilsin. Kodlar açıklamalarıyla birlikte aşağıda verilmiştir.
  
   //Delegate Tanımlıyoruz
   public delegate string VardiyaDurumu();  

   //Event Kaynak Sınıfımız
   class VardiyaEventCls  
   {
      //Event Tanımı
      public event VardiyaDurumu vardiyaEvt;  
      public void vardiyaSorgula()
      {
         string durum = vardiyaEvt();
         Console.WriteLine("Bugünkü Vardiya"+
         " Durumunuz: {0}", durum);
       }
    }

   static void Main(string[] args)
   {
      VardiyaEventCls varEvt = new VardiyaEventCls();
      //VardiyaDurumu delegesiyle varEvt_Kontrol metodumuzu
      // referans alıyoruz ve bunuda event'a ekliyoruz
      varEvt.vardiyaEvt += new VardiyaDurumu(varEvt_Kontrol);  
      //Aşağıdaki şekilde kullanımsa delegenin, olaydan(event)
      //çıkarılması sağlanır.
      // varEvt.vardiyaEvt -= new VardiyaDurumu(varEvt_Kontrol);
      Console.WriteLine("Bugünkü Vardiya Durumunuzu Öğrenmek"+
      " İçin Personel Numaranızı Giriniz");
      string numara = Console.ReadLine();
      //numarası 1 olan kişinin vardiyasını belirleyelim
      if (numara == "1")  
      {
         //vardiyaSorgula metodu ile vardiyaEvt tetiklenmiş olur
         varEvt.vardiyaSorgula();  
      }
      else
      {
         Console.WriteLine("Personel Numaranız Kayıtlı"+
         " Görünmüyor, Lütfen İnsan Kaynaklarıyla Görüşünüz");
      }
      Console.ReadLine();
   }

   static string varEvt_Kontrol()
   {
      //Günün Değeri Alınır
      string Bugun = DateTime.Now.DayOfWeek.ToString(); 
      string durum = "Belirsiz";
      switch (Bugun)
      {
         case "Monday":
              durum = "Gece";
              break;
         case "Tuesday":
              durum = "Gündüz";
              break;
         case "Wednesday":
              durum = "Gece";
              break;
         case "Thursday":
              durum = "Gündüz";
              break;
         case "Friday":
              durum = "Gece";
              break;
         case "Saturday":
              durum = "Gündüz";
              break;
         case "Sunday":
              durum = "Yok, Tatil";
              break;
          }
          return durum;
     }

0 yorum:

Yorum Gönder

Check Page Rank
DMCA.com