En Visual Basic, los valores predeterminados se establecen para:
Optional y un inicializador.Public Sub LogMessage(message As String, Optional level As String = "INFO") Console.WriteLine($"[{level}]: {message}") End Sub ' Llamada sin el segundo argumento - será 'INFO' LogMessage("Test")
Public Property Status As String = "Undefined"
Particularidades:
¿Se puede establecer un valor predeterminado para un parámetro de tipo objeto (por ejemplo, clase) en VB.NET?
Respuesta: No, para los parámetros Optional solo se permiten expresiones constantes, es decir, tipos de datos primitivos y cadenas. Para los objetos, solo se puede usar el valor Nothing, y si se necesita un objeto, debe ser creado dentro del cuerpo del método:
Public Sub DoWork(Optional obj As SomeClass = Nothing) If obj Is Nothing Then obj = New SomeClass() End If ' ... End Sub
Historia
Sistema financiero: Al agregar un nuevo parámetro con valor Optional, el desarrollador lo especificó no al final de la lista. Toda la llamada se compiló, pero los parámetros se desplazaron, lo que llevó a la transmisión incorrecta de valores.
Historia
Sistema de informes: Se utilizaron propiedades con autoinicialización (VB.NET 2010+), pero se olvidaron de considerar la lógica para sobrescribir valores desde el constructor, por lo que el valor predeterminado no se sobrescribía siempre correctamente.
Historia
Integración con API externa: En un intento de establecer un objeto como valor predeterminado para un parámetro Optional, se produjo un error de tiempo de compilación, lo que retrasó el lanzamiento y requirió una reestructuración masiva de las firmas de métodos.