In Visual Basic worden standaardwaarden ingesteld voor:
Optional en een initializer.Public Sub LogMessage(message As String, Optional level As String = "INFO") Console.WriteLine($"[{level}]: {message}") End Sub ' Aanroep zonder tweede argument - zal 'INFO' zijn LogMessage("Test")
Public Property Status As String = "Undefined"
Kenmerken:
Kan een standaardwaarde worden ingesteld voor een parameter van het objecttype (bijvoorbeeld een klasse) in VB.NET?
Antwoord: Nee, voor Optional-parameters zijn alleen constante expressies toegestaan, dat wil zeggen waarde-typen en strings. Voor objecten kan alleen de waarde Nothing worden gebruikt, en als een object nodig is, moet deze in het lichaam van de methode worden aangemaakt:
Public Sub DoWork(Optional obj As SomeClass = Nothing) If obj Is Nothing Then obj = New SomeClass() End If ' ... End Sub
Verhaal
Financieel systeem: Bij het toevoegen van een nieuwe parameter met een Optional-waarde heeft de ontwikkelaar deze niet aan het einde van de lijst geplaatst. De gehele aanroep compileerde, maar de parameters verschoof, wat leidde tot een onjuiste overdracht van waarden.
Verhaal
Rapporteringssysteem: Er werden eigenschappen met automatische initialisatie (VB.NET 2010+) gebruikt, maar de logica voor het overschrijven van waarden uit de constructie was niet voorzien, waardoor de standaardwaarde niet altijd correct werd overschreven.
Verhaal
Integratie met externe API: In een poging om een object als standaardwaarde voor een Optional-parameter in te stellen, ontstond er een compileertijdfout, wat de release vertraagde en ingrijpende herstructurering van de methodesignaturen vereiste.