HOW TO:決定是否提供選擇性參數 (Visual Basic)

當程序定義選擇性參數時,可能需要判斷呼叫程式碼是已經提供對應的引數,還是省略引數。

若參數值等於其預設值,則原因可能是下列其中一項:

  • 呼叫程式碼省略程序呼叫中的引數。

  • 呼叫程式碼提供了引數,其值恰好等於參數的預設值。

程序程式碼無法判斷是其中哪一個原因。 通常這不是問題,但在某些情況下,程序可能需要對每一個原因執行不同的動作。 最好的方法是將可用性不大的值定義成預設值,雖然這不保證呼叫程式碼不能提供該值。

若一定要完全確定呼叫程式是否提供選擇性引數,則最安全的方法是定義程序的多載版本。 請參閱 HOW TO:定義程序的多個版本 (Visual Basic)多載化程序的考慮因素 (Visual Basic)

若要判斷是否已將引數傳遞至選擇性參數

  1. 將不太可能使用的值定義成參數的預設值。

  2. 如果選擇性參數是 String 之類的參考型別,您就可以用 Nothing 做為預設值,只要不是引數需要的值即可。

  3. 在程序程式碼中,比較參數與預設值,並採取適當的動作。

多載包含和不含選擇性參數的程序

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

若要定義不同的程序版本來加入或省略引數

  1. 以引數清單中的參數定義一個程序版本。 不要將參數宣告為 Optional。

  2. 定義另一個不含參數的程序版本。 宣告必須等於其他每個程序的第一個版本之宣告。

  3. 在相對的程序版本中,在每一個呼叫內放置適當的程式碼。

範例

下列程序定義選擇性參數 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

如果呼叫程式碼不在引數清單中提供 office 值,Visual Basic 將提供預設值 "QJZ"。

如果選擇性參數是 String 之類的參考型別,您就可以用 Nothing (Visual Basic) 做為預設值,只要不是引數的預期值即可。

如需範例,了解如何使用多載來判斷是否已傳遞選擇性參數,請參閱 HOW TO:多載使用選擇性參數的程序 (Visual Basic)

請參閱

工作

HOW TO:為程序定義選擇性參數 (Visual Basic)

HOW TO:呼叫使用選擇性參數的程序 (Visual Basic)

參考

Optional (Visual Basic)

ParamArray (Visual Basic)

概念

程序參數和引數 (Visual Basic)

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

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

選擇性參數 (Visual Basic)

參數陣列 (Visual Basic)

程序多載化 (Visual Basic)