En Visual Basic, los eventos (Events) permiten que un objeto notifique a otros componentes de la aplicación sobre cambios que han ocurrido. Un evento se declara mediante la palabra clave Event. Se invoca utilizando el método RaiseEvent (VB.NET) o Raise (VB6), y los componentes pueden suscribirse a él (Handles/WithEvents).
Ejemplo VB.NET:
Public Class Worker Public Event WorkCompleted As EventHandler Public Sub DoWork() ' ...hacer algún trabajo RaiseEvent WorkCompleted(Me, EventArgs.Empty) End Sub End Class Public Class Manager Private WithEvents w As Worker Public Sub New() w = New Worker() End Sub Private Sub w_WorkCompleted(sender As Object, e As EventArgs) Handles w.WorkCompleted Console.WriteLine("¡Trabajo completado!") End Sub End Class
Aspectos importantes:
WithEvents solo se puede usar con campos y propiedades de clase.¿Se puede declarar un evento con el modificador de acceso
Privatey suscribirse a él desde otra clase?
Respuesta: No, el modificador Private restringe la visibilidad del evento solo a la clase donde fue declarado. Otras clases no podrán verlo, por lo tanto, no podrán suscribirse.
Historia
En una gran aplicación, los eventos se creaban con el modificador
Public, pero en ningún lugar se desuscribían explícitamente. Con el tiempo, esto llevaba a fugas de memoria, ya que los manejadores referenciaban objetos innecesarios.
Historia
Durante la migración de VB6 a VB.NET, el desarrollador esperaba que el evento estuviera disponible en todos los módulos, pero por defecto el evento era
Friend. Como resultado, el manejador no se activaba, y este error solo se encontró en las pruebas de integración.
Historia
El programador cometió un error en la firma del delegado del evento: intercambió
senderye. No hubo ningún mensaje de error (el manejador de eventos simplemente no se llamaba), y la lógica de negocio necesaria se omitió silenciosamente hasta la versión casi final.