Passando argumentos por posição e nome (Visual Basic)

Ao chamar um procedimento ou Sub um Function procedimento, você pode passar argumentos por posição – na ordem em que eles aparecem na definição do procedimento – ou você pode passá-los pelo nome, sem considerar a posição.

Ao passar um argumento por nome, especifique o nome declarado do argumento seguido por dois-pontos e um sinal de igual (:=), seguido pelo valor do argumento. Você pode fornecer argumentos nomeados em qualquer ordem.

Por exemplo, o procedimento a seguir Sub usa três 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

Ao chamar esse procedimento, você pode fornecer os argumentos por posição, por nome ou usando uma mistura de ambos.

Passando argumentos por posição e nome

Você pode chamar o Display método com seus argumentos passados por posição e delimitados por vírgulas, conforme mostrado no exemplo a seguir:

StudentInfo.Display("Mary", 19, #9/21/1998#)

Se você omitir um argumento opcional em uma lista de argumentos posicionais, deverá manter seu lugar com uma vírgula. O exemplo a seguir chama o Display método sem o age argumento:

StudentInfo.Display("Mary",, #9/21/1998#)

Transmitindo argumentos por valor

Como alternativa, você pode chamar Display com os argumentos passados pelo nome, também delimitados por vírgulas, conforme mostrado no exemplo a seguir:

StudentInfo.Display(age:=19, birth:=#9/21/1998#, name:="Mary")

Passar argumentos por nome dessa forma é especialmente útil quando você chama um procedimento que tem mais de um argumento opcional. Se você fornecer argumentos por nome, não precisará usar vírgulas consecutivas para indicar argumentos posicionais ausentes. Passar argumentos por nome também torna mais fácil controlar quais argumentos você está passando e quais você está omitindo.

Passando argumentos por posição e nome

Você pode fornecer argumentos por posição e pelo nome em uma única chamada de procedimento, conforme mostrado no exemplo a seguir:

StudentInfo.Display("Mary", birth:=#9/21/1998#)

No exemplo anterior, nenhuma vírgula extra é necessária para manter o lugar do argumento omitido age, já que birth é passado pelo nome.

Nas versões do Visual Basic antes da 15.5, quando você fornece argumentos por uma combinação de posição e nome, todos os argumentos posicionais devem vir primeiro. Depois de fornecer um argumento por nome, todos os argumentos restantes deverão ser passados pelo nome. Por exemplo, a chamada a seguir para o método exibe o Display erro do compilador BC30241: argumento nomeado esperado.

StudentInfo.Display("Mary", age:=19, #9/21/1998#)

A partir do Visual Basic 15.5, os argumentos posicionais poderão seguir argumentos nomeados se os argumentos posicionais finais estiverem na posição correta. Se compilado no Visual Basic 15.5, a chamada anterior ao Display método será compilada com êxito e não gerará mais o erro do compilador BC30241.

Essa capacidade de misturar e corresponder argumentos nomeados e posicionais em qualquer ordem é particularmente útil quando você deseja usar um argumento nomeado para tornar seu código mais legível. Por exemplo, o construtor de classe a seguir Person requer dois argumentos de tipo Person, ambos os quais podem ser Nothing.

Public Sub New(name As String, father As Person, mother As Person, dateOfBirth As Date)

Usar argumentos mistos nomeados e posicionais ajuda a tornar clara a intenção do código quando o valor do e father dos mother argumentos éNothing:

Dim p = New Person("Mary", father:=Nothing, mother:=Nothing, #9/21/1998#)

Para seguir argumentos posicionais com argumentos nomeados, você deve adicionar o seguinte elemento ao arquivo do projeto do Visual Basic (*.vbproj):

<PropertyGroup>
  <LangVersion>15.5</LangVersion>
</PropertyGroup>

Para obter mais informações, confira Configuração da versão de linguagem do Visual Basic.

Restrições ao fornecimento de argumentos por nome

Não é possível passar argumentos por nome para evitar inserir argumentos necessários. Você pode omitir apenas os argumentos opcionais.

Não é possível passar uma matriz de parâmetros pelo nome. Isso ocorre porque, quando você chama o procedimento, fornece um número indefinido de argumentos separados por vírgulas para a matriz de parâmetros e o compilador não pode associar mais de um argumento a um único nome.

Confira também