Delegados para eventos !!! ( en C# 2.0 )
Como es de conocimiento de todo el mundo, un evento es una ocurrencia dentro del ambiente de un programa que provoca que un event handler realice alguna acción en respuesta. Transportándonos a comparaciones, podemos decir que esto es análogo muchas veces a un excepción que es levantado y asignado a su respectivo exception handler. Es así que es importante saber que un evento es un tipo de referencia, es por eso que, el manejo de un evento es logrado usando una técnica de de recuperación llamada callback (conocida como función de retorno). Todo esto es parte de la programación de eventos la cual, por cierto, es muy común dentro de las interfaces gráficas del usuario, donde la entrada del usuario, como un click notifica a uno o más event handlers para reaccionar en respuesta a esta activación.
Entendiendo todo lo anterior, podemos ilustrar un ejemplo donde se usa delegados para tratar eventos. Para la demostración haremos uso de un ejemplo. Para esto crearemos la clase Empleado con el atributo Nombre (único campo, para la ilustración), también declaramos un evento llamado changed con event handler tipo UpdateEventHandler que se lanzará cuando se halla modificado el nombre del empleado. La idea es que después de ingresar el nombre del empleado, el programa nos emita un mensaje de confirmación. Asi que si ingresamos como nombre, por ejemplo, "Percy", se debe imprimir el mensaje "data changed !".
//Delegado handler del evento Changed
public delegate void UpdateEventHandler();
public class Empleado
{
//campo
private string Nombre;
//... resto de atributos..
//declaración del evento con su Event Handler "UpdateEventHandler"
public event UpdateEventHandler changed;
public Empleado()
{//direccionamiento del evento changed
//para que levante el método messageChanged
this.changed += new UpdateEventHandler(messageChanged);
}
public void setNombre(String s)
{
//seteamos la data
this.Nombre = s;
//se levanta el evento changed
this.changed();
}
internal void messageChanged()
{
//imprimos mensaje de conformidad.
Console.WriteLine("data changed !");
}
}
static void Main(string[] args)
{
//instanaciamos un objeto myData
Empleado data = new Empleado();
//fijamos el dato
data.setNombre(Console.ReadLine());
Console.ReadLine();
}
Es así que en el constructor de esta clase, fijamos el event handler asignándole el método messageChanged como método de respuesta para este evento changed. En el método setNombre modificamos el campo Nombre, para luego lanzar el evento changed, informando de esta manera que el proceso ha sido realizado con éxito.
Hemos terminado y de esta manera podemos sacarle partida a la programación de eventos usando delegados.El motivo de este post fue tan sólo de darle una idea de lo que se puede hacer usando esta combinación de delegates y eventos.
Percy Reyes.