Share via


多載屬性與方法 (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 會根據您指定的參數資料類型來呼叫正確程序。

多載規則

您可以新增兩個以上具有相同名稱的屬性或方法,為類別建立多載成員。 除了多載衍生成員之外,每個多載成員都必須有不同參數清單,且在多載屬性或程序時,無法將下列項目用作區分功能:

  • 套用至成員或成員參數的修飾詞,例如 ByValByRef

  • 參數的名稱

  • 程序的傳回型別

多載時,Overloads 關鍵字為選擇性,但若有任何多載成員使用 Overloads 關鍵字,則具有相同名稱的所有其他多載成員也必須指定此關鍵字。

衍生類別可以多載具有相同參數與參數類型之成員的繼承成員,此流程稱為「依名稱與簽章進行鏡像處理」。 若在依名稱與簽章鏡像處理時使用 Overloads 關鍵字,則會使用衍生類別的成員實作,而不是基底類別中的實作,而該成員的所有其他多載將可供衍生類別的執行個體使用。

若在具有相同參數與參數類型的成員多載繼承成員時省略 Overloads 關鍵字,則多載會稱為「依名稱遮蔽」。 依名稱遮蔽會取代成員的繼承實作,且會讓衍生類別的執行個體及其子系無法使用所有其他多載。

OverloadsShadows 修飾詞都無法與相同的屬性或方法搭配使用。

範例

下列範例會建立多載方法,以接受 StringDecimal 表示貨幣金額,並傳回包含營業稅的字串。

若要使用此範例建立多載方法

  1. 開啟新的專案,並新增名為 TaxClass 的類別。

  2. 將下列程式碼加入 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
    
  3. 將下列程序新增至您的表單。

    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
    
  4. 將按鈕新增至表單,並從按鈕的 Button1_Click 事件呼叫 ShowTax 程序。

  5. 執行專案,然後按一下表單上的按鈕以測試多載 ShowTax 程序。

在執行階段中,編譯器會選擇符合所使用參數的適當多載函式。 當您按一下按鈕時,會先以 Price 參數 (其為字串) 呼叫多載方法,而訊息 "Price is a String. Tax is $5.12" 隨即顯示。 TaxAmount 會以第二次的 Decimal 值呼叫,而訊息 "Price is a Decimal. Tax is $5.12" 隨即顯示。

另請參閱