namespace Articulos.Cap03
{
public delegate void DivisorEventHandler(object o, DivisionEventArgs e);
// Representa una clase con los argumentos del evento del
// evento de la operación de división:
public class DivisionEventArgs : EventArgs
{
// Por cada evento se registra el valor de la operación,
// y se guarda en el campo de sólo lectura `numero`:
public readonly int numero;
public DivisionEventArgs(int num)
{
numero = num;
}
}
// Clase interesada en escuchar las operaciones de
// división de dos maneras: en la consola y
// con un mensaje sobre el control MessageBox:
public class SubscriptorDivision
{
public void MostrarEnConsola(object o, DivisionEventArgs e)
{
Console.WriteLine("Evento. Dividendo de 7: {0}", e.numero);
}
public void MostrarEnMessageBox(object o, DivisionEventArgs e)
{
MessageBox.Show("Evento. Dividendo de 7: " + e.numero.ToString());
}
}
public class Aplicacion
{
// Evento asociado con la división por 7:
public static event DivisorEventHandler Divisor7;
public static void Main()
{
SubscriptorDivision dbsl = new SubscriptorDivision();
Divisor7 += new DivisorEventHandler(dbsl.MostrarEnConsola);
Divisor7 += new DivisorEventHandler(dbsl.MostrarEnMessageBox);
GenerarNumeros();
}
// Receptor de cada cambio (operación de división por 7):
public static void OnDivisionPor7(DivisionEventArgs e)
{
if (Divisor7 != null)
{
Divisor7(new object(), e);
}
}
public static void GenerarNumeros()
{
for (int i = 1; i <= 100; ++i)
{
if ( i % 7 == 0)
{
DivisionEventArgs e1 = new DivisionEventArgs(i);
OnDivisionPor7(e1);
}
}
}
}
}