程序多載化 (Visual Basic)
多載程序即使用相同名稱但不同的參數清單,在多個版本中定義程序。 多載的用途是定義數個與密切相關版本的程序,而不必以名稱加以區分。 您可以變更參數清單達成此目的。
多載規則
多載程序時,適用下列規則:
相同名稱。 每個多載版本必須使用相同的程序名稱。
不同的簽章。 下列項目中,每個多載版本必須至少有一項與所有其他多載版本不同:
參數數目
參數的順序
參數的資料類型
類型參數的數目 (適用於泛型程序)
傳回型別 (僅適用於轉換運算子)
程式名稱與上述項目統稱為程序的簽章。 呼叫多載程序時,編譯器會使用簽章檢查呼叫是否正確符合定義。
項目不屬於簽章。 未變更簽章時,您無法多載程序。 具體而言,只變更下列一或多個項目時,您無法多載程序:
程序修飾元關鍵字,例如
Public
、Shared
和Static
參數或型別參數名稱
型別參數限制 (適用於泛型程序)
參數修飾元關鍵字,例如
ByRef
和Optional
項目是否傳回值
傳回值的資料類型 (轉換運算子除外)
上述清單中的項目不屬於簽章。 雖然您無法使用項目區分多載版本,但在依簽章正確區分的多載版本間,您可以變更項目。
晚期繫結引數。 如果您要傳遞晚期繫結物件變數至多載版本,請宣告適當的參數為 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