多載是在類別中建立多個程式、實例建構函式或屬性,其名稱相同,但自變數類型不同。
超載使用
當您的物件模型指定對不同數據類型運作的程式使用相同的名稱時,多載特別有用。 例如,可以顯示數個不同資料類型的類別可能會有 Display 如下所示的程式:
Overloads Sub Display(ByVal theChar As Char)
' Add code that displays Char data.
End Sub
Overloads Sub Display(ByVal theInteger As Integer)
' Add code that displays Integer data.
End Sub
Overloads Sub Display(ByVal theDouble As Double)
' Add code that displays Double data.
End Sub
如果沒有多載,您仍然需要為每個程序建立不同的名稱,即使它們執行相同的功能,如下所示:
Sub DisplayChar(ByVal theChar As Char)
' Add code that displays Char data.
End Sub
Sub DisplayInt(ByVal theInteger As Integer)
' Add code that displays Integer data.
End Sub
Sub DisplayDouble(ByVal theDouble As Double)
' Add code that displays Double data.
End Sub
多載可讓您更輕鬆地使用屬性或方法,因為它提供可使用的數據類型選擇。 例如,先前討論的多載 Display 方法可以使用下列任何一行程式代碼來呼叫:
' Call Display with a literal of type Char.
Display("9"c)
' Call Display with a literal of type Integer.
Display(9)
' Call Display with a literal of type Double.
Display(9.9R)
在運行時間,Visual Basic 會根據您指定的參數數據類型呼叫正確的程式。
多載規則
您可以藉由新增兩個或多個具有相同名稱的屬性或方法,為類別建立多載成員。 除非是多載衍生成員,否則每個多載成員都必須有不同的參數清單,而且在多載屬性或程序時,不能使用下列項目作為區分特徵:
套用至成員或成員參數的修飾詞,例如
ByVal或ByRef。參數的名稱
傳回程序類型
在多載運算子中,Overloads 關鍵詞是可選的,但如果任何多載成員使用了 Overloads 關鍵詞,則所有具有相同名稱的其他多載成員也必須指定這個關鍵詞。
衍生類別可以使用具有相同參數和參數類型的成員來重載繼承的成員,這個過程稱為 依名稱和簽章遮蔽。 如果在以名稱和簽章遮蔽時使用Overloads關鍵詞,則會使用衍生類別成員的實作,而不是基類中的實作,並且該成員的所有其他重載將可供衍生類別的實例使用。
如果在多載具有相同參數和參數類型的成員以覆蓋繼承的成員時省略了關鍵字,這種多載稱為依名稱遮蔽。 依名稱遮蔽會取代成員的繼承實作,並讓衍生類別的實例及其後代無法使用所有其他重載。
Overloads和 Shadows 修飾詞不能與相同的屬性或方法搭配使用。
範例
下列範例會建立多載方法,以接受 String 或 Decimal 表示貨幣金額,並傳回包含銷售稅的字串。
若要使用此範例建立多載方法
開啟新的專案,並新增名為的
TaxClass類別。將下列程式碼加入
EmployeesBLLWithSprocs類別。Public Class TaxClass Overloads Function TaxAmount(ByVal decPrice As Decimal, ByVal TaxRate As Single) As String TaxAmount = "Price is a Decimal. Tax is $" & (CStr(decPrice * TaxRate)) End Function Overloads Function TaxAmount(ByVal strPrice As String, ByVal TaxRate As Single) As String TaxAmount = "Price is a String. Tax is $" & CStr((CDec(strPrice) * TaxRate)) End Function End Class將下列程序新增至您的表單。
Sub ShowTax() ' 8% tax rate. Const TaxRate As Single = 0.08 ' $64.00 Purchase as a String. Dim strPrice As String = "64.00" ' $64.00 Purchase as a Decimal. Dim decPrice As Decimal = 64 Dim aclass As New TaxClass 'Call the same method with two different kinds of data. MsgBox(aclass.TaxAmount(strPrice, TaxRate)) MsgBox(aclass.TaxAmount(decPrice, TaxRate)) End Sub將按鈕新增至表單,並從按鈕的事件呼叫
ShowTax程式Button1_Click。執行專案,然後點一下窗體上的按鈕來測試多載
ShowTax程式。
在運行時間,編譯程式會選擇符合所使用參數的適當多載函式。 當您按下按鈕時,會先呼叫多載方法,其 Price 參數是字串和訊息:「Price 是 String。」 [稅金] 為 $5.12“ 隨即顯示。
TaxAmount 第二次以 Decimal 值呼叫 ,而訊息「Price 為十進位。 [稅金] 為 $5.12“ 隨即顯示。