ProgrammatieVB.NET ontwikkelaar

Beschrijf de gebeurtenismechanica (Events) in Visual Basic en geef een voorbeeld van het maken van een eigen gebeurtenis. Waar moet je op letten bij de declaratie en inschrijving?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord

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:

  • Een gebeurtenis kan alleen worden aangeroepen in dezelfde klasse waar deze is gedeclareerd.
  • Als gebeurtenissen argumenten hebben, moeten de typen strikt gedefinieerd zijn.
  • WithEvents kan alleen worden gebruikt met velden en eigenschappen van de klasse.
  • Vergeet niet je af te melden voor een gebeurtenis indien nodig (bijvoorbeeld om geheugenlekken te voorkomen).

Vraag met een valstrik

Kan een gebeurtenis worden gedeclareerd met de toegangsmodificator Private en 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.

Voorbeelden van echte fouten door onwetendheid van de fijne kneepjes van het onderwerp


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 sender en e. Er was geen enkele foutmelding (de event handler werd gewoon niet aangeroepen), en noodzakelijke bedrijfslogica werd stilletjes overgeslagen tot de halffinale release.