程序多載化 (Visual Basic)

多載程序即使用相同名稱但不同的參數清單,在多個版本中定義程序。 多載的用途是定義數個與密切相關版本的程序,而不必以名稱加以區分。 您可以變更參數清單達成此目的。

多載規則

多載程序時,適用下列規則:

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

  • 不同的簽章。 下列項目中,每個多載版本必須至少有一項與所有其他多載版本不同:

    • 參數數目

    • 參數的順序

    • 參數的資料類型

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

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

    程式名稱與上述項目統稱為程序的簽章。 呼叫多載程序時,編譯器會使用簽章檢查呼叫是否正確符合定義。

  • 項目不屬於簽章。 未變更簽章時,您無法多載程序。 具體而言,只變更下列一或多個項目時,您無法多載程序:

    • 程序修飾元關鍵字,例如 PublicSharedStatic

    • 參數或型別參數名稱

    • 型別參數限制 (適用於泛型程序)

    • 參數修飾元關鍵字,例如 ByRefOptional

    • 項目是否傳回值

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

    上述清單中的項目不屬於簽章。 雖然您無法使用項目區分多載版本,但在依簽章正確區分的多載版本間,您可以變更項目。

  • 晚期繫結引數。 如果您要傳遞晚期繫結物件變數至多載版本,請宣告適當的參數為 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

另請參閱