共用方式為


選擇性參數 (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 做為預設值,只要不是引數需要的值即可。

選擇性參數和多載化

另一個用選擇性參數定義程序的方式是使用多載化 (Overloading)。 如果您有一個選擇性參數,您可以定義程序的兩個多載版本,其中一個接受該參數,而另一個則不接受。 隨著選擇性參數數目的增加,這個方法會變得比較複雜。 但是,它的優點是可以完全確定呼叫程式是否提供每一個選擇性引數。

另請參閱