Latest web development tutorials

C # événement (Event)

Event (Event) dit essentiellement est une action de l' utilisateur, tels que des boutons, cliquez sur, le mouvement de la souris, etc., ou certains pays émergents, tels que les notifications générées par le système.Demande doit répondre à un événement lorsque l'événement se produit. Par exemple, l'interruption. Les événements sont utilisés pour la communication inter-processus.

En utilisant l'événement délégué

Et l'événement est généré dans la déclaration de classe, et en utilisant la même classe de délégué associé au gestionnaire ou d'autres classes événement. Classe contient l'événement pour des événements d'édition. Ceci est appelél'éditeur (éditeur) classe.Autre accepter le type d'événement est appeléagrégateur (abonné) de classe.Événements en utilisant lapublication - (éditeur-abonné) modèle abonner.

Editeur (éditeur) et contient l'événement est un délégué défini des objets.Le contact entre les événements et les délégués sont également définis dans cet objet. objet Publisher (éditeur) de classe appelle cet événement, et en informe les autres objets.

Dispositif d'alimentation (abonné) est un événement accepté et fournir un objet de gestionnaire d'événements.Dans Publisher (éditeur) délégué de classe invocation lecteur de flux (abonné) méthode de classe (le gestionnaire d'événements).

Déclaration de l'événement (Event)

Dans le cas déclaré à l'intérieur de la classe, vous devez d'abord déclarer un type délégué pour l'événement. Par exemple:

Délégué public (statut de chaîne) vide BoilerLogHandler;

Puis, déclarer l'événement lui - même, en utilisant le mot - cléde l' événement:

// Sur la base de la définition ci-dessus de l'événement public événement délégué BoilerLogHandler BoilerEventLog;

Le code ci - dessus définit un délégué et un événement appeléBoilerEventLognomméBoilerLogHandler,l'événement sera généré lorsque le délégué est appelé.

exemple 1

using System;
namespace SimpleEvent
{
   using System;

   EventTest public class
   {
      valeur int privé;

      délégué public void NumManipulationHandler ();

      événement public NumManipulationHandler ChangeNum;

      virtual void protégée OnNumChanged ()
      {
         if (ChangeNum! = null)
         {
            ChangeNum ();
         }
         autre
         {
            Console.WriteLine ( "Event tiré!");
         }

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

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants:

Event Fired!
Event Fired!
Event Fired!

exemple 2

Cet exemple fournit un système de chaudière à eau chaude simple pour des applications de dépannage. Quand un technicien d'entretien pour vérifier la chaudière, la température et la pression chaudière seront les notes d'ingénieur de maintenance automatiquement enregistrées dans un fichier journal.

using System;
using System.IO;

BoilerEventAppl d'espace de noms
{

   // Chaudière de classe de classe de la chaudière
   {
      int température privée;
      pression int privé;
      Chaudière publique (int t, int p)
      {
         temp = t;
         pression = p;
      }

      public int getTemp ()
      {
         retour temporaire;
      }
      public int getPressure ()
      {
         ramener la pression;
      }
   }
   // DelegateBoilerEvent classe Event Publisher
   {
      Délégué public (statut de chaîne) vide BoilerLogHandler;

      // Sur la base de la définition ci-dessus de l'événement public événement délégué BoilerLogHandler BoilerEventLog;

      LogProcess public void ()
      {
         remarques de chaîne = "O. K";
         Chaudière b = new Boiler (100, 12);
         int t = b.getTemp ();
         int p = b.getPressure ();
         si (t> 150 || t <80 || p <12 || p> 15)
         {
            Remarques = "Besoin de maintenance";
         }
         OnBoilerEventLog ( «Connexion Info: \ n");
         OnBoilerEventLog ( "Temparature" + t + "\ nPressure:" + p);
         OnBoilerEventLog ( "\ nMessage:" + remarques);
      }

      OnBoilerEventLog protected void (string message)
      {
         if (BoilerEventLog! = null)
         {
            BoilerEventLog (message);
         }
      }
   }
   Conditions de telles réserves // écrites dans le BoilerInfoLogger de classe du fichier journal
   {
      fs FileStream;
      sw StreamWriter;
      publique BoilerInfoLogger (string filename)
      {
         fs = new FileStream (nom de fichier, FileMode.APPEND, FileAccess.Write);
         sw = new StreamWriter (fs);
      }
      Logger public void (info string)
      {
         sw.WriteLine (info);
      }
      vide Fermer publique ()
      {
         sw.Close ();
         fs.Close ();
      }
   }
   // Abonnement de l'événement est public class RecordBoilerInfo
   {
      Logger static void (info string)
      {
         Console.WriteLine (info);
      } // Fin de l'enregistreur

      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 ();
      } // Fin du principal

   } // Fin de RecordBoilerInfo
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants:

Logging Info:

Température 100
12 pression

Message: O. K