In Visual Basic stellen gebeurtenissen (Events) een object in staat om andere componenten van de applicatie op de hoogte te stellen van aangebrachte wijzigingen. Een gebeurtenis wordt gedeclareerd met het sleutelwoord Event. Het wordt aangeroepen met behulp van de methode RaiseEvent (VB.NET) of Raise (VB6), en componenten kunnen zich op deze gebeurtenis inschrijven (Handles/WithEvents).
Voorbeeld VB.NET:
Public Class Worker Public Event WorkCompleted As EventHandler Public Sub DoWork() ' ...wat werk 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("Werk voltooid!") End Sub End Class
Belangrijke punten:
WithEvents kan alleen worden gebruikt met velden en eigenschappen van de klasse.Kan een gebeurtenis worden gedeclareerd met de toegangsmodificator
Privateen kan er vanuit een andere klasse op worden ingeschreven?
Antwoord: Nee, de modificator Private beperkt de zichtbaarheid van de gebeurtenis tot alleen de klasse waar deze is gedeclareerd. Andere klassen zullen deze niet zien en kunnen zich er dus niet op inschrijven.
Verhaal
In een grote applicatie werden gebeurtenissen aangemaakt met de modificator
Public, maar er werd nergens expliciet afgemeld. Bij langdurig gebruik van de applicatie leidde dit tot geheugenlekken, omdat de handlers een verwijzing naar onnodige objecten behielden.
Verhaal
Bij de migratie van VB6 naar VB.NET verwachtte de ontwikkelaar dat de gebeurtenis in alle modules beschikbaar zou zijn, maar standaard was de gebeurtenis
Friend. Als gevolg hiervan werd de handler niet aangeslagen en werd deze bug pas ontdekt tijdens de integratietests.
Verhaal
De programmeur maakte een fout in de handtekening van de gebeurtenisdelegaat — sloten de volgorde van
senderene. Er was geen enkele foutmelding (de event handler werd gewoon niet aangeroepen), en noodzakelijke bedrijfslogica werd stilletjes overgeslagen tot de halffinale release.