多載屬性與方法 (Visual Basic)
多載是在類別中建立多個程序、執行個體建構函式或屬性,其具有相同名稱但不同引數類型。
多載使用方式
當您的物件模型指定對不同資料類型運作的程序採用相同名稱時,多載特別實用。 例如,可以顯示數種不同資料類型的類別,可能會有如下所示的 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
關鍵字,則多載會稱為「依名稱遮蔽」。 依名稱遮蔽會取代成員的繼承實作,且會讓衍生類別的執行個體及其子系無法使用所有其他多載。
Overloads
與 Shadows
修飾詞都無法與相同的屬性或方法搭配使用。
範例
下列範例會建立多載方法,以接受 String
或 Decimal
表示貨幣金額,並傳回包含營業稅的字串。
若要使用此範例建立多載方法
開啟新的專案,並新增名為
TaxClass
的類別。將下列程式碼加入
TaxClass
類別。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
將按鈕新增至表單,並從按鈕的
Button1_Click
事件呼叫ShowTax
程序。執行專案,然後按一下表單上的按鈕以測試多載
ShowTax
程序。
在執行階段中,編譯器會選擇符合所使用參數的適當多載函式。 當您按一下按鈕時,會先以 Price
參數 (其為字串) 呼叫多載方法,而訊息 "Price is a String. Tax is $5.12" 隨即顯示。 TaxAmount
會以第二次的 Decimal
值呼叫,而訊息 "Price is a Decimal. Tax is $5.12" 隨即顯示。