lunes, 21 de marzo de 2011

Ejemplo de Eventos y Delegados

La clase Empleado declara un evento "NombreCambiado" que se lanza cada vez que se cambia el atributo correspondiente al nombre del empleado. El evento tiene un manejador o delegado asociado (tipo del evento) "ActualizacionEventHandler" que declara una signatura para los métodos que pueden ser llamados para tratar el evento. En este caso, los métodos permitidos no devuelven nada (void) y deben tener un argumento de tipo string donde se pasará un mensaje a visualizar. En el método Main(), con la instrucción
MiEmpleado.NombreCambiado +=
new EjemploDelegados.ActualizacionEventHandler(NotificarCambioNombre);
se le indica al delegado que cuando se produzca el evento NombreCambiado se invoque al método "NotificarCambioNombre", método que respeta la firma declarada por el propio manejador de eventos.


*****************************************************************************

Program.cs


using System;

namespace EjemploDelegados
{
class Program
{
public static void NotificarCambioNombre(string msg)
{
//imprimos mensaje aviso.
Console.WriteLine("¡El nombre del empleado a cambiado!");
Console.WriteLine(msg);
}

public static void Main(string[] args)
{
Empleado MiEmpleado = new Empleado("Ramiro");
MiEmpleado.NombreCambiado +=
new EjemploDelegados.ActualizacionEventHandler(NotificarCambioNombre);
Console.Write("Nombre empleado: ");
MiEmpleado.setNombre(Console.ReadLine());

Console.Write("Pulsa cualquier tecla para continuar . . . ");
Console.ReadKey(true);
}

}
}


Empleado.cs


using System;

namespace EjemploDelegados
{
public delegate void ActualizacionEventHandler(string msg);

public class Empleado
{
//atributo
private string Nombre;

//... resto de atributos..

//declaración del evento
public event ActualizacionEventHandler NombreCambiado;

public Empleado(String Nombre)
{
this.Nombre=Nombre;
}

public void setNombre(string s)
{
//actualizar el atributo
string anteriorNombre=this.Nombre;
this.Nombre = s;

//lanzar el evento
this.NombreCambiado("Era "+anteriorNombre+"
y ahora es "+this.Nombre);
}

}
}

No hay comentarios:

Publicar un comentario