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.