Latest web development tutorials

C # de eventos (Event)

Evento (evento) dice básicamente es una acción del usuario, como botones, haga clic en, el movimiento del ratón, etc., o algunos emergentes, tales como notificaciones generadas por el sistema.Aplicación tiene que responder a un evento cuando se produce el evento. Por ejemplo, la interrupción. Los eventos se utilizan para la comunicación entre procesos.

Al utilizar el delegado de eventos

Y el evento se genera en la declaración de clase, y mediante el uso de la misma clase delegado asociado con el controlador de eventos u otras clases. Clase contiene eventos para eventos de publicación. Esto se llamala clase (editor) editor.Otros aceptan el tipo de evento es llamadolector de feeds (abonado) clase.Eventos utilizando elpublicar - modelo de suscripción (editor-suscriptor).

Editor (editor) y contiene el evento es definido un delegado objetos.El contacto entre los eventos y los delegados también se definen en este objeto. objeto de Publisher (editor) de la clase llama a este evento, y notifica a otros objetos.

El dispositivo de abastecimiento (abonado) es un evento aceptado y proporcionar un objeto controlador de eventos.método de clase en Publisher lector de feeds (editor) delegado de clase invocación (abonado) (el controlador de eventos).

Evento declaración (Evento)

En el caso declarado dentro de la clase, primero debe declarar un tipo de delegado para el evento. Por ejemplo:

delegado pública (estado de cadena) BoilerLogHandler vacío;

A continuación, declarar el evento en sí, usando la palabra claveevento:

// Sobre la base de la definición anterior del acto público de delegado de eventos BoilerLogHandler BoilerEventLog;

El código anterior define un delegado y un evento denominadoBoilerEventLogllamadoBoilerLogHandler,el evento se genera cuando se invoca el delegado.

Ejemplo 1

using System;
SimpleEvent espacio de nombres
{
   using System;

   EventTest clase pública
   {
      int valor privada;

      delegado public void NumManipulationHandler ();

      evento público NumManipulationHandler ChangeNum;

      virtual void protegida OnNumChanged ()
      {
         si (ChangeNum! = null)
         {
            ChangeNum ();
         }
         otro
         {
            Console.WriteLine ( "Evento despedido!");
         }

      }
      EventTest pública (int n)
      {
         EstablecerValor (n);
      }
      pública FijarValor void (int n)
      {
         si (valor! = n)
         {
            valor = n;
            OnNumChanged ();
         }
      }
   }
   MainClass clase pública
   {
      public static void Principal ()
      {
         EventTest e = nuevo EventTest (5);
         e.SetValue (7);
         e.SetValue (11);
         Console.ReadKey ();
      }
   }
}

Cuando el código se compila y ejecuta, produce los siguientes resultados:

Fired evento!
Fired evento!
Fired evento!

Ejemplo 2

En este ejemplo se proporciona un sistema de caldera de agua caliente simple para solucionar problemas de aplicaciones. Cuando un ingeniero de mantenimiento para verificar la caldera, la temperatura de la caldera y la presión será como notas ingeniero de mantenimiento registrados automáticamente en un archivo de registro.

using System;
using System.IO;

BoilerEventAppl de espacio de nombres
{

   // Clase Caldera Caldera de clase
   {
      Temp int privado;
      presión int privado;
      Caldera pública (int t, int p)
      {
         temp = t;
         presión = p;
      }

      public int getTemp ()
      {
         temp retorno;
      }
      public int getPressure ()
      {
         presión de retorno;
      }
   }
   // DelegateBoilerEvent clase Editorial Evento
   {
      delegado pública (estado de cadena) BoilerLogHandler vacío;

      // Sobre la base de la definición anterior del acto público de delegado de eventos BoilerLogHandler BoilerEventLog;

      LogProcess public void ()
      {
         Observaciones String = "O. K";
         Caldera b = nueva caldera (100, 12);
         int t = b.getTemp ();
         int p = b.getPressure ();
         si (t> 150 || t <80 || p <12 || p> 15)
         {
            Observaciones = "necesita mantenimiento";
         }
         OnBoilerEventLog ( "Registro de Información: \ n");
         OnBoilerEventLog ( "Temparature" + t + "\ nPressure:" + p);
         OnBoilerEventLog ( "\ nMessage:" + observaciones);
      }

      protegida OnBoilerEventLog vacío (mensaje de cadena)
      {
         si (BoilerEventLog! = null)
         {
            BoilerEventLog (mensaje);
         }
      }
   }
   Términos tales reservas // escriben en el archivo de registro de clase BoilerInfoLogger
   {
      FileStream fs;
      sw StreamWriter;
      BoilerInfoLogger pública (string filename)
      {
         fs = new FileStream (nombre de archivo, FileMode.APPEND, FileAccess.Write);
         sw = nuevo StreamWriter (fs);
      }
      Logger public void (Información string)
      {
         sw.WriteLine (información);
      }
      Cerrar public void ()
      {
         sw.Close ();
         fs.Close ();
      }
   }
   // Suscripción de eventos es public class RecordBoilerInfo
   {
      Logger static void (Información string)
      {
         Console.WriteLine (información);
      } // Fin de Logger

      static void main (String [] args)
      {
         BoilerInfoLogger fichero de registro = 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 de main

   } // Fin de RecordBoilerInfo
}

Cuando el código se compila y ejecuta, produce los siguientes resultados:

Registro de información:

temperatura 100
Presión 12

Mensaje: O. K