Eventos

Los objetos también tienen la posibilidad de de transmitirnos sus reacciones generando eventos. Los eventos se utilizan mucho en el diseño de la interfaz gráfica, ya que nos permiten obtener datos relativos a las acciones efectuadas por el usuario de la aplicación.

Declaración y activación de eventos

public delegate void EventHandler(Object sender, EventArgs e)

El primer parámetro identifica el objeto que está en el origen del evento. El segundo se utiliza para facilitar datos complementarios, sino hay datos se utiliza directamente una instancia de la clase.

Vamos a incluir dos eventos a la clase Cliente, el primero se activa cuando se añade un nuevo pedido al cliente, facilitando datos como número de pedido de cliente. El segundo evento se activará cuando el número de pedidos de un cliente sea igual a 5, y no facilitará datos adicionales.

Creamos la clase que representa los datos del primer evento.

public class AñadidoPedidoEventArgs: EventArgs {
  int numPdo;
  public AñadidoPedidoEventArgs(int num) {
    numPdo = num;
  }
  public int numPedidos {
    get {
      return numPdo;
    }
  }
}

Podemos ahora declarar los dos eventos en la clase Cliente.

public class Cliente: Persona, Comparable {
  public event EventHandler<AñadidoPedidoEventArgs> nuevoPedido;
  public event EventHandler maxPedido;
  ...
  protected virtual void activaNuevoPedido(AñadidoPedidoEventArgs e) {
    EventHandler<AñadidoPedidoEventArgs> handler = nuevoPedido;
    if (handler != null) {
    handler(this, e);
    }
  }
  protected virtual void activaMaxPedido(EventArgs e) {
    EventHandler handler = maxPedido;
    if (handler != null) {
      handler(this, e);
    }
  }
...
// Ahora activamos los eventos en el momento oportuno
...
  public void añadidoPedido() {
    numPedido++;
    AñadidoPedidoEventArgs e = new AñadidoPedidoEventArgs(numPedido);
    activaNuevoPedido(e);
    if (numPedido==5) {
      activaMaxPedido(new EventArgs());
    }
  }