Latest web development tutorials

C # zdarzeń (Event)

Zdarzenie (Event) w zasadzie mówi to działanie użytkownika, takich jak guziki, Click, ruch myszy, etc., lub niektórych wschodzących, takich jak powiadomienia generowane przez system.Aplikacja musi reagować na zdarzenia, gdy wystąpi zdarzenie. Na przykład, przerwanie. Zdarzenia są wykorzystywane do komunikacji między procesami.

Używając zdarzenie delegata

A zdarzenie jest generowane w zgłoszeniu klas, i za pomocą tej samej klasy z przekazanym związanego z obsługi zdarzeń lub innych klas. Klasa zawiera zdarzenie dla wydarzeń wydawniczych.To się nazywa (wydawca)Klasawydawcy.Inne akceptują typ zdarzenia jest nazywanyczytnik RSS (abonent) Klasa.Wydarzenia z wykorzystaniempublikowania - modelu subskrybowania (wydawca-subskrybent).

Wydawca (Publisher) i zawiera zdarzenie jest delegatem zdefiniowane obiekty.Kontakt między zdarzeniami i delegatów są również określone w tym obiekcie. Wydawca (Publisher) zwraca obiekt klasy tego zdarzenia i powiadamia inne obiekty.

urządzenie zasilające (abonent) jest akceptowane zdarzenia i stanowią obiekt obsługi zdarzenia.W programie Publisher (wydawca) Klasa delegata wywołania czytnik RSS (abonent) metoda klasy (procedura obsługi zdarzenia).

Zestawienie zdarzeń (Event)

W przypadku zadeklarowanej wewnątrz klasy, należy najpierw zadeklarować typ delegata zdarzenia. Na przykład:

Delegat publicznych (stan string) void BoilerLogHandler;

Następnie zadeklarować samego zdarzenia, używając słowa kluczowegowydarzenia:

// Na podstawie powyższej definicji Delegata Zdarzenie publicznej BoilerLogHandler BoilerEventLog;

Powyższy kod definiuje delegata i zdarzenia o nazwieBoilerEventLognazwieBoilerLogHandler,zdarzenie zostanie wygenerowany, gdy pełnomocnik jest wywoływany.

Przykład 1

using System;
nazw SimpleEvent
{
   using System;

   public class EventTest
   {
      private int value;

      Delegat public void NumManipulationHandler ();

      publicznym wydarzeniem NumManipulationHandler ChangeNum;

      chronione virtual void OnNumChanged ()
      {
         if (ChangeNum! = null)
         {
            ChangeNum ();
         }
         więcej
         {
            Console.WriteLine ( "Zdarzenie opalane!");
         }

      }
      publicznego EventTest (int n)
      {
         SetValue (n);
      }
      public void SetValue (int n)
      {
         if (value! = n)
         {
            wartość = n;
            OnNumChanged ();
         }
      }
   }
   public class MainClass
   {
      public static void main ()
      {
         EventTest e = new EventTest (5);
         e.SetValue (7);
         e.SetValue (11);
         Console.ReadKey ();
      }
   }
}

Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:

Fired Event!
Fired Event!
Fired Event!

Przykład 2

Przykład ten zapewnia prosty układ ciepłej wody w kotle dla aplikacji do rozwiązywania problemów. Gdy inżynier utrzymania sprawdzić kotła, temperatura i ciśnienie w kotle będzie jak zauważa konserwatora automatycznie zapisane w pliku dziennika.

using System;
using System.IO;

BoilerEventAppl przestrzeni nazw
{

   Kocioł // class kotła
   {
      private int temp;
      private int ciśnienia;
      Kocioł publicznych (t int, int p)
      {
         temp = t;
         Ciśnienie = p;
      }

      public int getTemp ()
      {
         temperatura powrotu;
      }
      public int getPressure ()
      {
         powrót ciśnienia;
      }
   }
   // Zdarzenie klasy Wydawca DelegateBoilerEvent
   {
      Delegat publicznych (stan string) void BoilerLogHandler;

      // Na podstawie powyższej definicji Delegata Zdarzenie publicznej BoilerLogHandler BoilerEventLog;

      public void LogProcess ()
      {
         Uwagi String = "O. K";
         Kocioł b = new kotła (100, 12);
         int t = b.getTemp ();
         int p = b.getPressure ();
         if (T> 150 || t <80 || p <12 || p> 15)
         {
            Uwagi = "wymaga konserwacji";
         }
         OnBoilerEventLog ( "Rejestrowanie informacji: \ n");
         OnBoilerEventLog ( "temparature" + t + "\ nPressure:" + p);
         OnBoilerEventLog ( "\ nMessage:" + uwagi);
      }

      protected void OnBoilerEventLog (komunikat string)
      {
         if (BoilerEventLog! = null)
         {
            BoilerEventLog (komunikat);
         }
      }
   }
   Terminy takie zastrzeżenia // zapisywane w pliku dziennika klasowego BoilerInfoLogger
   {
      fs FileStream;
      StreamWriter sw;
      publicznego BoilerInfoLogger (string filename)
      {
         fs = new FileStream (nazwa pliku, FileMode.Append, FileAccess.Write);
         sw = new StreamWriter (FS);
      }
      public void Logger (info string)
      {
         sw.WriteLine (info);
      }
      public void Close ()
      {
         sw.Close ();
         fs.Close ();
      }
   }
   // Subskrypcji zdarzeń jest public class RecordBoilerInfo
   {
      void Logger (info string)
      {
         Console.WriteLine (info);
      } // Koniec Logger

      static void Main (string [] args)
      {
         BoilerInfoLogger FileLog = new BoilerInfoLogger ( "E: \\ boiler.txt");
         DelegateBoilerEvent boilerEvent = new DelegateBoilerEvent ();
         boilerEvent.BoilerEventLog + = new 
         DelegateBoilerEvent.BoilerLogHandler (Logger);
         boilerEvent.BoilerEventLog + = new 
         DelegateBoilerEvent.BoilerLogHandler (filelog.Logger);
         boilerEvent.LogProcess ();
         Console.ReadLine ();
         filelog.Close ();
      } // Koniec główną

   } // Koniec RecordBoilerInfo
}

Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:

Rejestrowanie informacji:

Temperatura 100
ciśnienie 12

Wiadomość: O. K