Sdílet prostřednictvím


Přetížení procedury (Visual Basic)

Přetížení procedury znamená jeho definování ve více verzích s použitím stejného názvu, ale různých seznamů parametrů. Účelem přetížení je definovat několik úzce souvisejících verzí procedury, aniž byste je museli odlišit podle názvu. Uděláte to tak, že obměníte seznam parametrů.

Pravidla přetížení

Při přetížení procedury platí následující pravidla:

  • Stejný název. Každá přetížená verze musí používat stejný název procedury.

  • Jiný podpis. Každá přetížená verze se musí lišit od všech ostatních přetížených verzí minimálně v jednom z následujících hledisek:

    • Počet parametrů

    • Pořadí parametrů

    • Datové typy parametrů

    • Počet parametrů typu (pro obecný postup)

    • Návratový typ (pouze pro operátor převodu)

    Spolu s názvem procedury jsou předchozí položky souhrnně označovány jako podpis procedury. Při volání přetížené procedury kompilátor použije podpis ke kontrole, zda volání správně odpovídá definici.

  • Položky nepatřící k podpisu. Proceduru nelze přetížit bez změny jejího podpisu. Konkrétně nelze přetížit proceduru tak, že se liší pouze jednou nebo více z následujících položek:

    • Modifikační klíčová slova procedury, například Public, Shareda Static

    • Názvy parametrů nebo názvy typových parametrů

    • Omezení parametrů typu (pro obecný postup)

    • Klíčová slova modifikátoru parametrů, například ByRef a Optional

    • Určuje, jestli vrací hodnotu.

    • Datový typ návratové hodnoty (s výjimkou operátoru převodu)

    Položky v předchozím seznamu nejsou součástí podpisu. Ačkoli je nemůžete použít k rozlišení mezi přetíženými verzemi, můžete je měnit mezi přetíženými verzemi, které jsou správně rozlišeny jejich podpisy.

  • Late-Bound argumenty. Pokud chcete předat proměnnou zpožděného vázaného objektu do přetížené verze, musíte deklarovat odpovídající parametr jako Object.

Více verzí procedury

Předpokládejme, že píšete Sub postup pro zaúčtování transakce vůči zůstatku zákazníka a chcete být schopni odkazovat na zákazníka buď jménem, nebo číslem účtu. K tomu můžete definovat dva různé Sub postupy, jako v následujícím příkladu:

Sub postName(ByVal custName As String, ByVal amount As Single)
    ' Insert code to access customer record by customer name.
End Sub
Sub postAcct(ByVal custAcct As Integer, ByVal amount As Single)
    ' Insert code to access customer record by account number.
End Sub

Přetížené verze

Alternativou je přetížení jednoho jména funkce. Klíčové slovo Přetížení můžete použít k definování verze procedury pro každý seznam parametrů následujícím způsobem:

Overloads Sub post(ByVal custName As String, ByVal amount As Single)
    ' Insert code to access customer record by customer name.
End Sub
Overloads Sub post(ByVal custAcct As Integer, ByVal amount As Single)
    ' Insert code to access customer record by account number.
End Sub

Další přetížení

Pokud byste také chtěli přijmout částku transakce buď v Decimal nebo Single, mohli byste přetížit post pro povolení této varianty. Pokud byste to udělali u každého přetížení v předchozím příkladu, měli byste čtyři Sub funkce, všechny se stejným názvem, ale mají čtyři různé podpisy.

Výhody přetížení

Výhodou přetížení procedury je flexibilita volání. Chcete-li použít post postup deklarovaný v předchozím příkladu, volající kód může získat identifikaci zákazníka buď jako String nebo jako Integer, a potom zavolat stejný postup v obou případech. Ilustruje to následující příklad:

Imports MSVB = Microsoft.VisualBasic
Dim customer As String
Dim accountNum As Integer
Dim amount As Single
customer = MSVB.Interaction.InputBox("Enter customer name or number")
amount = MSVB.Interaction.InputBox("Enter transaction amount")
Try
    accountNum = CInt(customer)
    Call post(accountNum, amount)
Catch
    Call post(customer, amount)
End Try

Viz také