ProgrammatieVB.NET ontwikkelaar

Beschrijf het werk en de kenmerken van eventverwerking (Events) en delegates (Delegates) in Visual Basic .NET. Welke problemen kunnen ontstaan bij verkeerd gebruik?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord

In Visual Basic .NET zijn delegates (Delegate) objecten die een verwijzing naar een methode encapsuleren, terwijl events (Events) een mechanisme zijn om abonnees te informeren over het optreden van bepaalde voorwaarden of wijzigingen. Delegates stellen je in staat om "gedrag" (methoden) als parameters door te geven, en events implementeren het uitgever-abonnee patroon.

Kenmerken:

  • Events worden gedeclareerd met behulp van het trefwoord Event binnen een klasse.
  • Delegates definiëren de handtekening van de methoden waarop je kunt abonneren.
  • Abonneren gebeurt via AddHandler en afmelden via RemoveHandler.

Voorbeeld:

' Definitie van delegate Public Delegate Sub NotifyHandler(ByVal message As String) ' Klasse met een event Public Class Notifier Public Event OnNotify As NotifyHandler Public Sub DoWork() RaiseEvent OnNotify("Werk voltooid!") End Sub End Class ' Abonneren en aanroepen Dim n As New Notifier() AddHandler n.OnNotify, AddressOf SubNotify Sub SubNotify(ByVal msg As String) Console.WriteLine(msg) End Sub n.DoWork()

Events zijn vooral nuttig in UI-programmering en de dispatching van bedrijfslogica.

Strikvraag

Wat gebeurt er als je een event RaiseEvent aanroept en er zijn geen abonnees?

Onjuist antwoord: Er treedt een runtime-fout op.

Juist antwoord: Er gebeurt niets — als er geen abonnees zijn voor het event, is de aanroep van RaiseEvent veilig en zal er geen uitzondering zijn.

Voorbeeld:

Public Event OnUpdate() ' Aanroep van RaiseEvent, zelfs als er niemand is geabonneerd: RaiseEvent OnUpdate() ' Toegestaan en leidt niet tot een fout

Voorbeelden van echte fouten door onbekendheid met de nuances van het onderwerp


Verhaal
In een grote desktopapplicatie heeft een ontwikkelaar de handlers niet afgemeld van events, waardoor objecten niet werden vrijgegeven door de garbage collector (geheugenlek). Dit leidde tot een groei van het geheugen en crashes na enkele uren gebruik.


Verhaal
Een jonge professional, die de werking van delegates en events niet begreep, heeft per ongeluk dezelfde methode meerdere keren achtereen geabonneerd. Dit leidde tot meervoudige aanroepen van dezelfde handlers — gebruikers ontvingen duplicaten van meldingen.


Verhaal
In één project werd het event RaiseEvent aangeroepen, in de veronderstelling dat het altijd effect zou hebben. Tijdens de tests werd ontdekt dat zonder abonnees er geen effect was, wat leidde tot misverstanden in de bedrijfslogica van de applicatie en foutieve rapportages.