如果程序具有 ParamArray 參數,則無法定義接受一維陣列作為參數陣列的重載版本。 如需詳細資訊,請參閱多載程式的考量中的「ParamArray 參數的隱含多載」。
多載帶有可變數數目的參數的程序
確保程序和呼叫代碼的邏輯比使用
ParamArray
參數更能從多載版本中受益。 請參閱重載方法的注意事項 <重載與 ParamArrays>。判斷程式應該在參數清單變數部分接受的提供值數目。 這可能包含沒有值的案例,而且可能包含單一一維數位列的案例。
針對每個可接受的提供值數目,撰寫
Sub
Function
或宣告語句來定義對應的參數清單。 請勿在此多載版本中使用Optional
或ParamArray
關鍵詞。在每個宣告中,在
Sub
或Function
關鍵詞前面加上 Overloads 關鍵詞。在每個宣告之後,撰寫當呼叫程式代碼提供對應至該宣告參數清單的值時,應該執行的程序代碼。
視需要以
End Sub
或End Function
語句終止每個程式。
範例
下列範例顯示使用 ParamArray 參數所定義的程式,然後是一組對等的多載程式。
Sub p(ByVal d As Date, ByVal ParamArray c() As Char)
' The preceding definition is equivalent to the following overloads.
' Overloads Sub p(ByVal d As Date)
' Overloads Sub p(ByVal d As Date, ByVal c() As Char)
' Overloads Sub p(ByVal d As Date, ByVal c1 As Char)
' Overloads Sub p(ByVal d As Date, ByVal c1 As Char, ByVal c2 As Char)
' And so on, with an additional Char argument in each successive overload.
您無法用包含一維陣列的參數陣列來重載這類程序。 不過,您可以使用其他隱含重載的特徵。 下列宣告說明這一點。
' The following overload is not valid because it takes an array for the parameter array.
' Overloads Sub p(ByVal x As Date, ByVal y() As Char)
' The following overload takes a single value for the parameter array and is valid.
Overloads Sub p(ByVal z As Date, ByVal w As Char)
多載版本中的程式代碼不需要測試呼叫端程式代碼是否為 參數提供一或多個值,或者如果提供多少值 ParamArray
。 Visual Basic 會將控件傳遞至符合呼叫自變數清單的版本。
編譯程式碼
因為具有 ParamArray
參數的程序等同於一組重載版本,所以您不能以任何已存在的隱含重載的參數列表來重載此類程序。 如需詳細資訊,請參閱 多載程序中的考量。
.NET Framework 安全性
當您處理可能無限大陣列時,可能會有超過應用程式某些內部容量的風險。 如果您接受參數陣列,您應該測試呼叫代碼傳遞的陣列的長度,如果它超出應用程式的處理能力,則應採取適當的措施。