共用方式為


HOW TO:決定是否提供選擇性參數

更新:2007 年 11 月

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

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

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

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

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

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

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

  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:使用選擇性參數的多載程序

請參閱

工作

HOW TO:為程序定義選擇性參數

HOW TO:呼叫使用選擇性參數的程序

概念

程序參數和引數

以傳值和傳址方式傳遞引數

依位置和名稱傳遞引數

選擇性參數

參數陣列

程序多載化

參考

Optional (Visual Basic)

ParamArray