Latest web development tutorials

C # event (Ereignis)

Ereignis (Ereignis) im Grunde sagt , ist eine Benutzeraktion, wie Schaltflächen, klicken, Mausbewegungen usw. oder einiger aufstrebender, wie vom System generierten Meldungen.Anwendung muss auf ein Ereignis zu reagieren, wenn das Ereignis eintritt. Zum Beispiel kann der Interrupt. Ereignisse werden für die Kommunikation zwischen Prozessen verwendet.

Durch die Verwendung der Delegierten Veranstaltung

Und das Ereignis wird in der Klassendeklaration erzeugt und durch den gleichen Delegierten-Klasse mit dem Event-Handler oder anderen Klassen zugeordnet sind. Klasse enthält Ereignis für die Veröffentlichung von Veranstaltungen. Dies istder Verlag (Herausgeber) Klasse.Andere nehmen das Ereignistyp wirdFeed - Reader (Teilnehmer)Klasse bezeichnet. Veranstaltungen mit derveröffentlichen - abonnieren (Publisher-Subscriber - Modell).

Publisher (Verleger) und enthält das Ereignis ein Delegierter definierte Objekte.Kontakt zwischen den Ereignissen und Delegierten werden auch in diesem Objekt definiert. Publisher (Verleger) Klasse-Objekt ruft dieses Ereignis und benachrichtigt andere Objekte.

Vorschubeinrichtung (Teilnehmer) ist eine anerkannte Veranstaltung und bieten einen Event - Handler - Objekt.In Publisher (Verleger) Klasse Delegate-Aufruf-Feed-Reader (Teilnehmer) Klassenmethode (der Event-Handler).

Statement-Event (Ereignis)

Für den Fall, innerhalb der Klasse deklariert, müssen Sie zunächst eine Delegattyp für den Fall erklären. Zum Beispiel:

public delegate void BoilerLogHandler (string Status);

Dann erklären das Ereignis selbst, dasEreignis Schlüsselwort:

// Basierend auf der obigen Definition des Ereignisdelegaten öffentlichen Veranstaltung BoilerLogHandler BoilerEventLog;

Der obige Code definiert einen Delegierten und ein Ereignis mit dem NamenBoilerEventLognamensBoilerLogHandler,wird das Ereignis erzeugt werden , wenn der Delegat aufgerufen wird.

Beispiel 1

using System;
Namespace SimpleEvent
{
   using System;

   public class EventTest
   {
      private int value;

      public delegate void NumManipulationHandler ();

      öffentliche Veranstaltung NumManipulationHandler ChangeNum;

      geschützt virtual void OnNumChanged ()
      {
         if (ChangeNum! = null)
         {
            ChangeNum ();
         }
         sonst
         {
            Console.WriteLine ( "Ereignis gefeuert!");
         }

      }
      public EventTest (int n)
      {
         SetValue (n);
      }
      public void setValue (int n)
      {
         if (value! = n)
         {
            Wert = n;
            OnNumChanged ();
         }
      }
   }
   public class Mainclass
   {
      public static void Main ()
      {
         EventTest e = new EventTest (5);
         e.SetValue (7);
         e.SetValue (11);
         Console.ReadKey ();
      }
   }
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt es die folgenden Ergebnisse:

Ereignis gefeuert!
Ereignis gefeuert!
Ereignis gefeuert!

Beispiel 2

Dieses Beispiel stellt ein einfaches Heißwasserkesselanlage für die Fehlerbehebung Anwendungen. Wenn ein Wartungstechniker den Kessel zu überprüfen, die Kesseltemperatur und Druck wird als Wartungsingenieur Notizen werden automatisch in einer Protokolldatei aufgezeichnet.

using System;
using System.IO;

Namespace BoilerEventAppl
{

   // Kesselklasse Klasse Boiler
   {
      private int Temp;
      private int Druck;
      public Boiler (int t, int p)
      {
         temp = t;
         Druck = p;
      }

      public int getTemp ()
      {
         Rücklauftemp;
      }
      public int getPressure ()
      {
         Rückkehr Druck;
      }
   }
   // Event Publisher Klasse DelegateBoilerEvent
   {
      public delegate void BoilerLogHandler (string Status);

      // Basierend auf der obigen Definition des Ereignisdelegaten öffentlichen Veranstaltung BoilerLogHandler BoilerEventLog;

      public void LogProcess ()
      {
         Zeichenfolge Bemerkungen = "O. K";
         Boiler b = new Boiler (100, 12);
         int t = b.getTemp ();
         int p = b.getPressure ();
         if (t> 150 || t <80 || p <12 || p> 15)
         {
            Bemerkungen = "Wartungsbedarf";
         }
         OnBoilerEventLog ( "Logging Info: \ n");
         OnBoilerEventLog ( "Temparature" + t + "\ nPressure:" + p);
         OnBoilerEventLog ( "\ nMessage:" + Bemerkungen);
      }

      protected void OnBoilerEventLog (string message)
      {
         if (BoilerEventLog! = null)
         {
            BoilerEventLog (Nachricht);
         }
      }
   }
   Bedingungen solche Vorbehalte // in die Protokolldatei Klasse BoilerInfoLogger geschrieben
   {
      Filestream fs;
      Streamwriter sw;
      public BoilerInfoLogger (string filename)
      {
         fs = new Filestream (Dateiname, FileMode.APPEND, FileAccess.Write);
         sw = new Stream (fs);
      }
      public void Logger (string info)
      {
         sw.WriteLine (info);
      }
      public void Close ()
      {
         sw.Close ();
         fs.Close ();
      }
   }
   // Event-Abonnement ist public class RecordBoilerInfo
   {
      static void Logger (string info)
      {
         Console.WriteLine (info);
      } // Ende der 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 ();
      } // Ende der Haupt

   } // Ende der RecordBoilerInfo
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt es die folgenden Ergebnisse:

Logging Info:

Temperatur 100
Druck 12

Nachricht: O. K