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);
}
}
}