共用方式為


選擇性參數 (Visual Basic)

您可以指定程序參數是選擇性的,而且呼叫程式時,不需要為其提供任何自變數。 選擇性參數 會以 Optional 程式定義中的 關鍵詞表示。 適用的規則如下:

  • 程序定義中的每個選擇性參數都必須指定預設值。

  • 選擇性參數的預設值必須是常數表達式。

  • 在程式定義中遵循選擇性參數的每個參數也必須是選擇性的。

下列語法顯示具有選擇性參數的程式宣告:

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

使用選擇性參數呼叫程序

當您使用選擇性參數呼叫程式時,可以選擇是否提供 自變數。 如果沒有,程式會使用針對該參數宣告的預設值。

當您省略自變數清單中的一或多個選擇性自變數時,您可以使用連續的逗號來標記其位置。 下列範例呼叫會提供第一個和第四個自變數,但不提供第二個或第三個自變數:

Sub name(argument 1, , , argument 4)  

下列範例會對函式進行數次 MsgBox 呼叫。 MsgBox 有一個必要參數和兩個選擇性參數。

第一次呼叫 MsgBox 時,會按照 MsgBox 定義的順序提供這三個參數。 第二個呼叫僅提供必須的參數。 第三和第四個呼叫會提供第一個和第三個參數。 第三個呼叫會依位置執行此工作,而第四個呼叫會依名稱執行。

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")

判斷選擇性參數是否存在

程式無法在運行時間偵測指定的自變數是否已省略,或呼叫端程式代碼已明確提供預設值。 如果您需要進行這項區別,您可以將不太可能的值設定為預設值。 下列程式會定義選擇性參數 office,並測試其預設值 QJZ,以查看是否已在呼叫中省略它:

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

如果選擇性參數是參考型別,例如 String,您可以使用 Nothing 做為預設值,但前提是這不是自變數的預期值。

選擇性參數和多載

定義具有可選參數的函式的另一種方式是使用多載。 如果您有一個選擇性參數,您可以定義這個程序的兩個多載版本,一個接受此參數,一個不接受。 當選擇性參數數目增加時,此方法會變得更加複雜。 不過,其優點是您可以絕對確定呼叫程式是否提供每個選擇性自變數。

另請參閱