Latest web development tutorials

C # event (evento)

Evento (Event) diz, basicamente, é uma ação do usuário, como botões, clique, o movimento do mouse, etc., ou alguns emergentes, tais como notificações geradas pelo sistema.Aplicativo precisa responder a um evento quando o evento ocorre. Por exemplo, a interrupção. Os eventos são usados ​​para comunicação entre processos.

Usando o evento delegado

E o evento é gerado na declaração da classe, e usando a mesma classe de delegado associado com o manipulador de eventos ou de outras classes. Classe contém eventos para eventos de publicação. Isto é chamadoo publisher (editor) classe.Outro aceitar o tipo de evento é chamadoleitor de feeds (assinante) classe.Eventos usando apublicar - modelo de subscrição (editor-assinante).

Publisher (editor) e contém o evento é um delegado definido objetos.O contato entre eventos e delegados são também definidas neste objeto. Publisher (editor) classe de objeto chama este evento, e notifica outros objetos.

Dispositivo de avanço (assinante) é um evento aceite e fornecer um objeto processador de eventos.No Publisher leitor de feeds (editor) classe delegado de chamada (assinante) método de classe (o manipulador de eventos).

Declaração de evento (Event)

No caso declarado dentro da classe, você deve primeiro declarar um tipo de delegado para o evento. Por exemplo:

Delegado público (status string) nula BoilerLogHandler;

Em seguida, declarar o evento em si, usando a palavra-chavedo evento:

// Com base na definição acima do evento delegado evento público BoilerLogHandler BoilerEventLog;

O código acima define um delegado e um evento chamadoBoilerEventLogchamadoBoilerLogHandler,o evento será gerado quando o representante é invocado.

exemplo 1

using System;
SimpleEvent namespace
{
   using System;

   EventTest classe pública
   {
      valor int privado;

      delegado public void NumManipulationHandler ();

      evento público NumManipulationHandler ChangeNum;

      vazio virtual protegido OnNumChanged ()
      {
         if (ChangeNum! = null)
         {
            ChangeNum ();
         }
         mais
         {
            Console.WriteLine ( "Evento despedido!");
         }

      }
      pública EventTest (int n)
      {
         DefinirValor (N);
      }
      SetValue public void (int n)
      {
         if (valor! = n)
         {
            valor = N;
            OnNumChanged ();
         }
      }
   }
   MainClass classe pública
   {
      public static void Main ()
      {
         EventTest e = new EventTest (5);
         e.SetValue (7);
         e.SetValue (11);
         Console.ReadKey ();
      }
   }
}

Quando o código acima é compilado e executado, ele produz os seguintes resultados:

Evento ateado fogo!
Evento ateado fogo!
Evento ateado fogo!

exemplo 2

Este exemplo fornece um sistema de caldeira de água quente simples para aplicações de solução de problemas. Quando um engenheiro de manutenção para verificar a caldeira, a temperatura ea pressão da caldeira será tão notas engenheiro de manutenção registrados automaticamente para um arquivo de log.

using System;
usando System.IO;

BoilerEventAppl namespace
{

   // Caldeira Caldeira classe classe
   {
      int temp privado;
      pressão int privado;
      Caldeira pública (int t, int p)
      {
         temp = t;
         pressão = p;
      }

      getTemp int público ()
      {
         regresso temporário;
      }
      getPressure int público ()
      {
         a pressão de retorno;
      }
   }
   // DelegateBoilerEvent Evento classe Publisher
   {
      Delegado público (status string) nula BoilerLogHandler;

      // Com base na definição acima do evento delegado evento público BoilerLogHandler BoilerEventLog;

      LogProcess public void ()
      {
         Observações String = "O. K";
         Caldeira b = new caldeira (100, 12);
         int t = b.getTemp ();
         int p = b.getPressure ();
         Se (t> || 150 T <80 || p <12 || p> 15)
         {
            observações = "Precisa de manutenção";
         }
         OnBoilerEventLog ( "Logging Info: \ n");
         OnBoilerEventLog ( "temparature" + t + "\ nPressure:" + p);
         OnBoilerEventLog ( "\ nMensagem:" + observações);
      }

      protegidas OnBoilerEventLog void (mensagem de texto)
      {
         if (BoilerEventLog! = null)
         {
            BoilerEventLog (mensagem);
         }
      }
   }
   Termos tais reservas // escrita ao BoilerInfoLogger classe arquivo de log
   {
      fs FileStream;
      StreamWriter sw;
      pública BoilerInfoLogger (string filename)
      {
         fs = new FileStream (filename, FileMode.APPEND, FileAccess.Write);
         sw = new StreamWriter (fs);
      }
      Logger public void (info string)
      {
         sw.WriteLine (info);
      }
      Fechar public void ()
      {
         sw.Close ();
         fs.Close ();
      }
   }
   // Assinatura do evento é de classe pública RecordBoilerInfo
   {
      Logger static void (info string)
      {
         Console.WriteLine (info);
      } // Fim da 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 ();
      } // Fim da principal

   } // Fim da RecordBoilerInfo
}

Quando o código acima é compilado e executado, ele produz os seguintes resultados:

Logging info:

temperatura 100
pressão 12

Mensagem: O. K