Dela via


Skicka argument efter position och efter namn (Visual Basic)

När du anropar en Sub eller procedur kan du skicka argument efter position – i den ordning de visas i procedurens definition – eller skicka dem med namn, utan hänsyn till Function position.

När du skickar ett argument efter namn anger du argumentets deklarerade namn följt av ett kolon och ett likhetstecken (:=), följt av argumentvärdet. Du kan ange namngivna argument i valfri ordning.

Följande procedur tar till exempel Sub tre argument:

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

När du anropar den här proceduren kan du ange argumenten efter position, efter namn eller genom att använda en blandning av båda.

Skicka argument efter position

Du kan anropa Display metoden med dess argument som skickas efter position och avgränsas med kommatecken, som du ser i följande exempel:

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

Om du utelämnar ett valfritt argument i en positionell argumentlista måste du hålla dess plats med ett kommatecken. I följande exempel anropas Display metoden utan age argumentet:

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

Skicka argument efter namn

Du kan också anropa Display med argumenten som skickas med namn, även avgränsade med kommatecken, som du ser i följande exempel:

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

Att skicka argument med namn på det här sättet är särskilt användbart när du anropar en procedur som har mer än ett valfritt argument. Om du anger argument efter namn behöver du inte använda på varandra följande kommatecken för att ange saknade positionsargument. Att skicka argument efter namn gör det också lättare att hålla reda på vilka argument du skickar och vilka du utelämnar.

Blanda argument efter position och efter namn

Du kan ange argument både efter position och efter namn i ett enda proceduranrop, som du ser i följande exempel:

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

I föregående exempel krävs inget extra kommatecken för att behålla platsen för det utelämnade age argumentet, eftersom birth det skickas med namn.

När du anger argument med en blandning av position och namn i versioner av Visual Basic före 15.5 måste alla positionsargument komma först. När du anger ett argument efter namn måste alla återstående argument skickas med namn. Följande anrop till metoden visar till Display exempel kompilatorfel BC30241: Namngivet argument förväntas.

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

Från och med Visual Basic 15.5 kan positionsargument följa namngivna argument om de avslutande positionsargumenten är i rätt position. Om det kompileras under Visual Basic 15.5 kompileras det tidigare anropet Display till metoden korrekt och genererar inte längre kompilatorfel BC30241.

Den här möjligheten att blanda och matcha namngivna argument och positionella argument i valfri ordning är särskilt användbar när du vill använda ett namngivet argument för att göra koden mer läsbar. Följande klasskonstruktor kräver till exempel Person två argument av typen Person, som båda kan vara Nothing.

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

Genom att använda blandade namngivna argument och positionsargument kan du göra kodens avsikt tydlig när värdet för argumenten father och mother är Nothing:

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

Om du vill följa positionella argument med namngivna argument måste du lägga till följande element i visual basic-projektfilen (*.vbproj):

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

Mer information finns i ställa in visual basic-språkversionen.

Begränsningar för att ange argument efter namn

Du kan inte skicka argument med namn för att undvika att ange nödvändiga argument. Du kan bara utelämna de valfria argumenten.

Du kan inte skicka en parametermatris efter namn. Detta beror på att när du anropar proceduren anger du ett obegränsat antal kommaavgränsade argument för parametermatrisen och kompilatorn kan inte associera fler än ett argument med ett enda namn.

Se även