Dela via


Valfria parametrar (Visual Basic)

Du kan ange att en procedurparameter är valfri och att inget argument behöver anges för den när proceduren anropas. Valfria parametrar anges av nyckelordet Optional i procedurdefinitionen. Följande regler gäller:

  • Varje valfri parameter i procedurdefinitionen måste ange ett standardvärde.

  • Standardvärdet för en valfri parameter måste vara ett konstant uttryck.

  • Varje parameter som följer en valfri parameter i procedurdefinitionen måste också vara valfri.

Följande syntax visar en procedurdeklaration med en valfri parameter:

Sub name(ByVal parameter1 As datatype1, Optional ByVal parameter2 As datatype2 = defaultvalue)  

Samtalsprocedurer med valfria parametrar

När du anropar en procedur med en valfri parameter kan du välja om du vill ange argumentet. Om du inte gör det använder proceduren standardvärdet som deklarerats för parametern.

När du utelämnar ett eller flera valfria argument i argumentlistan använder du efterföljande kommatecken för att markera deras positioner. Följande exempelanrop tillhandahåller de första och fjärde argumenten, men inte det andra eller tredje:

Sub name(argument 1, , , argument 4)  

I följande exempel görs flera anrop till MsgBox funktionen. MsgBox har en obligatorisk parameter och två valfria parametrar.

Det första anropet för att MsgBox tillhandahålla alla tre argumenten i den ordning som MsgBox definierar dem. Det andra anropet tillhandahåller endast det argument som krävs. Det tredje och fjärde anropet anger de första och tredje argumenten. Det tredje anropet gör detta efter position, och det fjärde anropet gör det med namn.

MsgBox("Important message", MsgBoxStyle.Critical, "MsgBox Example")
MsgBox("Just display this message.")
MsgBox("Test message", , "Title bar text")
MsgBox(Title:="Title bar text", Prompt:="Test message")

Avgöra om det finns ett valfritt argument

En procedur kan inte identifiera vid körning om ett visst argument har utelämnats eller om den anropande koden uttryckligen har angett standardvärdet. Om du behöver göra den här skillnaden kan du ange ett osannolikt värde som standardvärde. Följande procedur definierar den valfria parametern office, och testar för dess standardvärde, QJZ, för att se om den har utelämnats i anropet:

Sub notify(ByVal company As String, Optional ByVal office As String = "QJZ")
    If office = "QJZ" Then
        Debug.WriteLine("office not supplied -- using Headquarters")
        office = "Headquarters"
    End If
    ' Insert code to notify headquarters or specified office.
End Sub

Om den valfria parametern är en referenstyp, till exempel en String, kan du använda Nothing som standardvärde, förutsatt att detta inte är ett förväntat värde för argumentet.

Valfria parametrar och överlagring

Ett annat sätt att definiera en procedur med valfria parametrar är att använda överlagring. Om du har en valfri parameter kan du definiera två överlagrade versioner av proceduren, en som accepterar parametern och en utan den. Den här metoden blir mer komplicerad när antalet valfria parametrar ökar. Fördelen är dock att du kan vara helt säker på om det anropande programmet angav varje valfritt argument.

Se även