fork download
  1. using System;
  2.  
  3. namespace Articulos.Cap04
  4. {
  5. internal class EjemploEvento
  6. {
  7. // Campo que siempre que sea modificado se
  8. // notificará su nuevo estado a través de un evento:
  9. private int valor;
  10.  
  11. // Delegado diseñado para el evento que 'monitorea'
  12. // el cambio de estado del campo `valor`:
  13. public delegate void ManipulacionCampoValorEventHandler();
  14.  
  15. // Evento que monitorea el estado del campo `valor`:
  16. public event ManipulacionCampoValorEventHandler CambioNumero;
  17.  
  18. // Constructor que inicializa el campo `numero`:
  19. public EjemploEvento(int numero)
  20. {
  21. EstablecerValor (numero);
  22. }
  23.  
  24. protected virtual void OnValorCambio()
  25. {
  26. if (CambioNumero != null)
  27. {
  28. CambioNumero();
  29. }
  30. else
  31. {
  32. Console.WriteLine("Evento: El estado del campo `valor` ha cambiado.");
  33. }
  34. }
  35.  
  36. public void EstablecerValor(int numero)
  37. {
  38. if (valor != numero)
  39. {
  40. valor = numero;
  41. OnValorCambio();
  42. }
  43. }
  44. }
  45.  
  46. internal class Aplicacion
  47. {
  48. public static void Main()
  49. {
  50. // Inclusive cuando creamos una instancia de `EjemploEvento`
  51. // se genera el evento:
  52. EjemploEvento e = new EjemploEvento(5);
  53.  
  54. // Otras operaciones que generan un evento:
  55. e.EstablecerValor(7);
  56. e.EstablecerValor(11);
  57. }
  58. }
  59. }
Success #stdin #stdout 0.02s 33824KB
stdin
Standard input is empty
stdout
Evento: El estado del campo `valor` ha cambiado.
Evento: El estado del campo `valor` ha cambiado.
Evento: El estado del campo `valor` ha cambiado.