Sdílet prostřednictvím


Přetížené vlastnosti a metody (Visual Basic)

Přetížení je vytvoření více procedur, konstruktoru instance nebo vlastnosti ve třídě se stejným názvem, ale různými typy argumentů.

Nadměrné využití

Přetížení je zvlášť užitečné, když objektový model určuje, že používáte stejné názvy procedur, které pracují s různými datovými typy. Například třída, která může zobrazit několik různých datových typů, může mít Display postupy, které vypadají takto:

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

Bez přetížení byste museli pro každou proceduru vytvořit jedinečné názvy, i když dělají totéž, jak je znázorněno dále:

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

Přetížení usnadňuje používání vlastností nebo metod, protože poskytuje výběr datových typů, které lze použít. Například přetížená metoda Display diskutovaná dříve může být volána kterýmkoliv z následujících řádků kódu:

' 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)

Během běhu Visual Basic volá správnou proceduru na základě datových typů parametrů, které určíte.

Pravidla přetížení

Přetížený člen třídy vytvoříte přidáním dvou nebo více vlastností nebo metod se stejným názvem. S výjimkou přetížených odvozených členů musí mít každý přetížený člen různé seznamy parametrů a následující položky nelze použít jako odlišující funkci při přetížení vlastnosti nebo procedury:

  • Modifikátory, například ByVal nebo ByRef, které se vztahují na člen nebo parametry členu.

  • Názvy parametrů

  • Návratové typy procedur

Klíčové Overloads slovo je volitelné při přetížení, ale pokud některý přetížený člen používá Overloads klíčové slovo, pak všechny ostatní přetížené členy se stejným názvem musí také zadat toto klíčové slovo.

Odvozené třídy mohou přetížit zděděné členy jinými členy se stejnými parametry a typy parametrů, což je proces známý jako stínění podle názvu a podpisu. Overloads Pokud je klíčové slovo použito při stínování názvem a podpisem, bude implementace odvozené třídy použita místo implementace v základní třídě a všechny ostatní přetížení tohoto členu budou k dispozici pro instance odvozené třídy.

Pokud je klíčové slovo vynecháno při přetížení zděděného členu členem, který má totožné parametry a typy parametrů, nazývá se toto přetížení Overloads. Stínování jménem nahrazuje zděděnou implementaci člena a způsobí, že všechna ostatní přetížení nejsou k dispozici pro instance odvozené třídy a její potomky.

Modifikátory Overloads a Shadows nelze použít současně se stejnou vlastností nebo metodou.

Příklad

Následující příklad vytvoří přetížené metody, které přijímají buď částku v dolarech nebo její reprezentaci, a které vrátí řetězec obsahující daň z prodeje.

Použití tohoto příkladu k vytvoření přetížené metody

  1. Otevřete nový projekt a přidejte třídu s názvem TaxClass.

  2. Do třídy přidejte následující kód 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. Do formuláře přidejte následující postup.

    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. Přidejte do formuláře tlačítko a volejte proceduru ShowTaxButton1_Click z události tlačítka.

  5. Spusťte projekt a kliknutím na tlačítko ve formuláři otestujte přetíženou ShowTax proceduru.

Za běhu kompilátor zvolí příslušnou přetíženou funkci, která odpovídá použitým parametrům. Když kliknete na tlačítko, přetížená metoda je volána jako první s Price parametrem, který je řetězec a se zprávou "Cena je řetězec." Zobrazí se daň ve výši 5,12 USD. TaxAmount je volána s Decimal hodnotou podruhé a zpráva, "Cena je desetinné číslo." Zobrazí se daň ve výši 5,12 USD.

Viz také