In Visual Basic werden Standardwerte festgelegt für:
Optional und einem Initialisierer.Public Sub LogMessage(message As String, Optional level As String = "INFO") Console.WriteLine($"[{level}]: {message}") End Sub ' Aufruf ohne zweiten Argument - wird 'INFO' sein LogMessage("Test")
Public Property Status As String = "Undefined"
Besonderheiten:
Kann man einen Standardwert für einen Parameter vom Objekttyp (z. B. Klasse) in VB.NET festlegen?
Antwort: Nein, für Optional-Parameter sind nur konstante Ausdrücke zulässig, also Typen von Wertdaten und Strings. Für Objekte kann nur der Wert Nothing verwendet werden, und wenn ein Objekt benötigt wird, sollte es im Methodenkörper erstellt werden:
Public Sub DoWork(Optional obj As SomeClass = Nothing) If obj Is Nothing Then obj = New SomeClass() End If ' ... End Sub
Geschichte
Finanzsystem: Bei der Hinzufügung eines neuen Parameters mit Optional-Wert gab der Entwickler an, ihn nicht am Ende der Liste anzugeben. Der gesamte Aufruf wurde kompiliert, aber die Parameter verschoben sich, was zu falschen Wertübertragungen führte.
Geschichte
Berichtssystem: Verwendeten Eigenschaften mit Auto-Initialisierung (VB.NET 2010+), vergaßen jedoch, die Logik zur Überschreibung der Werte aus der Konstruktion zu berücksichtigen, wodurch der Standardwert nicht immer korrekt überschrieben wurde.
Geschichte
Integration mit externem API: Bei dem Versuch, ein Objekt als Standardwert für einen Optional-Parameter festzulegen, trat ein Kompilierungsfehler auf, der die Veröffentlichung verzögerte und umfangreiche Refaktorisierungen der Methodensignaturen erforderte.