共用方式為


選擇性參數 (Visual Basic)

您可以將程序參數指定為選擇項,當該程序被呼叫時就不必提供引數。「選擇性參數」(Optional Parameter) 在程序定義中是由 Optional 關鍵字表示,可套用下列規則:

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

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

  • 在程序定義中,每一個跟在選擇性參數之後的參數也必須是選擇項。

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

Sub sub name(ByVal parameter 1 As data type 1, Optional ByVal parameter 2 As data type 2 = default value)

以選擇性參數呼叫程序

當您以選擇性參數呼叫程序時,可以選擇是否提供引數。如果不提供,則該程序會使用該參數所宣告的預設值。

當您省略引數清單中的一個或多個選擇性引數時,必須用連續逗號來標示它們的位置。下列呼叫範例提供第一個和第四個引數,而不提供第二個或第三個引數:

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

請參閱

參考

Optional (Visual Basic)

ParamArray (Visual Basic)

概念

Visual Basic 中的程序

程序參數和引數 (Visual Basic)

以傳值和傳址方式傳遞引數 (Visual Basic)

依位置和名稱傳遞引數 (Visual Basic)

參數陣列 (Visual Basic)

程序多載化 (Visual Basic)