Pasar argumentos por posición o por nombre (Visual Basic)
Al llamar a un procedimiento o , puede pasar argumentos por posición (en el orden en que aparecen en la definición del procedimiento) o puede pasarlos por nombre, sin tener en cuenta la Sub Function posición.
Cuando se pasa un argumento por nombre, se especifica el nombre declarado del argumento seguido de dos puntos y un signo igual ( ), seguido := del valor del argumento. Puede proporcionar argumentos con nombre en cualquier orden.
Por ejemplo, el procedimiento Sub siguiente toma tres argumentos:
Public Class StudentInfo
Shared Sub Display(name As String,
Optional age As Short = 0,
Optional birth As Date = #1/1/2000#)
Console.WriteLine($"Name = {name}; age = {age}; birth date = {birth:d}")
End Sub
End Class
Al llamar a este procedimiento, puede proporcionar los argumentos por posición, por nombre o mediante una combinación de ambos.
Pasar argumentos por posición
Puede llamar al método con sus argumentos pasados por posición y delimitados por comas, como se Display muestra en el ejemplo siguiente:
StudentInfo.Display("Mary", 19, #9/21/1998#)
Si omite un argumento opcional en una lista de argumentos posicionales, debe mantener su lugar con una coma. En el ejemplo siguiente se llama Display al método sin el argumento age :
StudentInfo.Display("Mary",, #9/21/1998#)
Pasar argumentos por nombre
Como alternativa, puede llamar a con los argumentos pasados por nombre, también delimitados por comas, como se muestra Display en el ejemplo siguiente:
StudentInfo.Display(age:=19, birth:=#9/21/1998#, name:="Mary")
Pasar argumentos por nombre de esta manera es especialmente útil cuando se llama a un procedimiento que tiene más de un argumento opcional. Si proporciona argumentos por nombre, no tiene que usar comas consecutivas para indicar que faltan argumentos posicionales. Pasar argumentos por nombre también facilita el seguimiento de los argumentos que se pasan y los que se omiten.
Mezclar argumentos por posición y por nombre
Puede proporcionar argumentos por posición y por nombre en una sola llamada a procedimiento, como se muestra en el ejemplo siguiente:
StudentInfo.Display("Mary", birth:=#9/21/1998#)
En el ejemplo anterior, no se necesita ninguna coma adicional para contener el lugar del argumento omitido, ya que age birth se pasa por nombre.
En versiones de Visual Basic anteriores a la 15.5, cuando se suministran argumentos por una combinación de posición y nombre, todos los argumentos posicionales deben ser los primeros. Una vez que proporcione un argumento por nombre, todos los argumentos restantes deben pasarse por nombre. Por ejemplo, la siguiente llamada al método muestra el Display error del compilador BC30241: se esperaba un argumento con nombre.
StudentInfo.Display("Mary", age:=19, #9/21/1998#)
A partir Visual Basic 15.5, los argumentos posicionales pueden seguir argumentos con nombre si los argumentos posicionales finales están en la posición correcta. Si se compila en Visual Basic 15.5, la llamada anterior al método se compila correctamente y ya no genera el error del compilador Display BC30241.
Esta capacidad de combinar argumentos con nombre y posicionales en cualquier orden es especialmente útil cuando se quiere usar un argumento con nombre para que el código sea más legible. Por ejemplo, el Person constructor de clase siguiente requiere dos argumentos de tipo , que pueden ser Person Nothing .
Public Sub New(name As String, father As Person, mother As Person, dateOfBirth As Date)
El uso de argumentos con nombre y posicionales mixtos ayuda a que la intención del código sea clara cuando el valor de father los mother argumentos y es Nothing :
Dim p = New Person("Mary", father:=Nothing, mother:=Nothing, #9/21/1998#)
Para seguir los argumentos posicionales con argumentos con nombre, debe agregar el siguiente elemento al archivo Visual Basic proyecto * (.vbproj):
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Para obtener más información, vea establecer Visual Basic versión del lenguaje .
Restricciones para proporcionar argumentos por nombre
No se pueden pasar argumentos por nombre para evitar escribir los argumentos necesarios. Solo puede omitir los argumentos opcionales.
No se puede pasar una matriz de parámetros por nombre. Esto se debe a que cuando se llama al procedimiento, se proporciona un número indefinido de argumentos separados por comas para la matriz de parámetros y el compilador no puede asociar más de un argumento con un solo nombre.