using System; namespace Articulos.Cap04 { internal class EjemploEvento { // Campo que siempre que sea modificado se // notificará su nuevo estado a través de un evento: private int valor; // Delegado diseñado para el evento que 'monitorea' // el cambio de estado del campo `valor`: public delegate void ManipulacionCampoValorEventHandler(); // Evento que monitorea el estado del campo `valor`: public event ManipulacionCampoValorEventHandler CambioNumero; // Constructor que inicializa el campo `numero`: public EjemploEvento(int numero) { EstablecerValor (numero); } protected virtual void OnValorCambio() { if (CambioNumero != null) { CambioNumero(); } else { Console.WriteLine("Evento: El estado del campo `valor` ha cambiado."); } } public void EstablecerValor(int numero) { if (valor != numero) { valor = numero; OnValorCambio(); } } } internal class Aplicacion { public static void Main() { // Inclusive cuando creamos una instancia de `EjemploEvento` // se genera el evento: EjemploEvento e = new EjemploEvento(5); // Otras operaciones que generan un evento: e.EstablecerValor(7); e.EstablecerValor(11); } } }