共用方式為


程序多載 (Visual Basic)

重載方法表示在多個版本中定義一個程序,使用相同的名稱但不同的參數清單。 多載的目的是要定義數個密切相關的程式版本,而不需要依名稱區分它們。 您可以藉由改變參數清單來執行此動作。

多載規則

當您多載程式時,會套用下列規則:

  • 同名。 每個多載版本都必須使用相同的程序名稱。

  • 不同的簽章。 每個多載版本都必須在下列各方面中至少一個不同於所有其他多載版本:

    • 參數數目

    • 參數的順序

    • 參數的數據類型

    • 類型參數數目(適用於泛型程式)

    • 傳回型別 (僅適用於轉換運算子)

    與程式名稱一起,上述專案會統稱為程式的 簽章 。 當您呼叫多載程式時,編譯程式會使用簽章來檢查呼叫是否正確符合定義。

  • 未包含在簽字內的項目。 您無法在不改變簽名的情況下多載函式。 特別是,您無法只透過改變下列一或多個項目來重載程序:

    • 程式修飾詞關鍵詞,例如 PublicSharedStatic

    • 參數或類型參數名稱

    • 類型參數條件約束 (適用於泛型程式)

    • 參數修改器關鍵字,例如 ByRefOptional

    • 它是否傳回值

    • 傳回值的資料類型(轉換運算元除外)

    前面清單中的項目不是簽章的一部分。 雖然您無法使用它們來區分多載版本,但您可以在已經依簽章適當區分的多載版本中改變它們。

  • 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

額外重載

如果您也希望接受DecimalSingle的交易金額,您可以進一步重載post以允許此變化。 如果您對上述範例中的每個多載執行這個動作,則您會有四個Sub程序,全都具有相同的名稱,但具有四個不同的簽名。

重載的優點

多載程式的優點在於呼叫的彈性。 若要使用 post 上述範例中所宣告的程式,呼叫端程式代碼可以取得客戶識別為 StringInteger,然後在任一情況下呼叫相同的程式。 下面這個範例可說明這點:

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

另請參閱