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ů.

Přetížení 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 popsaná Display dříve může být volána s některým 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)

V době běhu jazyka Visual Basic volá správnou proceduru na základě datových typů zadaných parametrů.

Přetížená pravidla

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 s členy, které mají identické parametry a typy parametrů, proces známý jako stínová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.

Overloads Pokud je klíčové slovo vynecháno při přetížení zděděného členu s členem, který má stejné parametry a typy parametrů, pak přetížení se nazývá stínování podle názvu. Stínování podle názvu 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 jeho decedenty.

Modifikátory Overloads nelze Shadows použít se stejnou vlastností nebo metodou.

Příklad

Následující příklad vytvoří přetížené metody, které přijímají buď String částku v dolaru nebo Decimal reprezentaci, a 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 TaxClass přidejte následující kód.

    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 zpráva"Price je String. 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é