重載方法表示在多個版本中定義一個程序,使用相同的名稱但不同的參數清單。 多載的目的是要定義數個密切相關的程式版本,而不需要依名稱區分它們。 您可以藉由改變參數清單來執行此動作。
多載規則
當您多載程式時,會套用下列規則:
同名。 每個多載版本都必須使用相同的程序名稱。
不同的簽章。 每個多載版本都必須在下列各方面中至少一個不同於所有其他多載版本:
參數數目
參數的順序
參數的數據類型
類型參數數目(適用於泛型程式)
傳回型別 (僅適用於轉換運算子)
與程式名稱一起,上述專案會統稱為程式的 簽章 。 當您呼叫多載程式時,編譯程式會使用簽章來檢查呼叫是否正確符合定義。
未包含在簽字內的項目。 您無法在不改變簽名的情況下多載函式。 特別是,您無法只透過改變下列一或多個項目來重載程序:
程式修飾詞關鍵詞,例如
Public
、Shared
和Static
參數或類型參數名稱
類型參數條件約束 (適用於泛型程式)
參數修改器關鍵字,例如
ByRef
和Optional
它是否傳回值
傳回值的資料類型(轉換運算元除外)
前面清單中的項目不是簽章的一部分。 雖然您無法使用它們來區分多載版本,但您可以在已經依簽章適當區分的多載版本中改變它們。
Late-Bound 自變數。 如果您要將晚期綁定物件變數傳遞至多載版本,您必須將適當的參數宣告為 Object。
程序的多個版本
假設您撰寫一個 Sub
程序,以針對客戶的餘額過帳交易,並且您希望能夠依名稱或帳戶號碼識別客戶。 若要容納這一點,您可以定義兩個不同的 Sub
程式,如下列範例所示:
Sub postName(ByVal custName As String, ByVal amount As Single)
' Insert code to access customer record by customer name.
End Sub
Sub postAcct(ByVal custAcct As Integer, ByVal amount As Single)
' Insert code to access customer record by account number.
End Sub
多載版本
替代方法是多載單一程序名稱。 您可以使用 Overloads 關鍵字來定義每個參數清單的程式版本,如下所示:
Overloads Sub post(ByVal custName As String, ByVal amount As Single)
' Insert code to access customer record by customer name.
End Sub
Overloads Sub post(ByVal custAcct As Integer, ByVal amount As Single)
' Insert code to access customer record by account number.
End Sub
額外重載
如果您也希望接受Decimal
或Single
的交易金額,您可以進一步重載post
以允許此變化。 如果您對上述範例中的每個多載執行這個動作,則您會有四個Sub
程序,全都具有相同的名稱,但具有四個不同的簽名。
重載的優點
多載程式的優點在於呼叫的彈性。 若要使用 post
上述範例中所宣告的程式,呼叫端程式代碼可以取得客戶識別為 String
或 Integer
,然後在任一情況下呼叫相同的程式。 下面這個範例可說明這點:
Imports MSVB = Microsoft.VisualBasic
Dim customer As String
Dim accountNum As Integer
Dim amount As Single
customer = MSVB.Interaction.InputBox("Enter customer name or number")
amount = MSVB.Interaction.InputBox("Enter transaction amount")
Try
accountNum = CInt(customer)
Call post(accountNum, amount)
Catch
Call post(customer, amount)
End Try
另請參閱
- 程式
- 如何:定義程式 的多個版本
- 如何:呼叫多載程式
- 如何:重載使用選擇性參數的程序
- 如何:多載接受無限數目參數的程式
- 多載程式中的 考慮
- 重載解析
- 過載
- 在 Visual Basic 中泛型類型