Procedura přetížení (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. Provedete to tak, že se liší seznam parametrů.

Přetížená pravidla

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, které nejsou součástí podpisu. Proceduru nelze přetížit bez různých podpisů. 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 typů

    • 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. I když je nemůžete použít k rozlišení mezi přetíženými verzemi, můžete je mezi přetíženými verzemi, které jsou správně rozlišeny jejich podpisy.

  • Argumenty s pozdní vazbou 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 názvu procedury. 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 jste také chtěli přijmout částku transakce v jedné Decimal nebo Single, můžete další přetížení post povolit tuto variantu. Pokud jste to udělali u každého přetížení v předchozím příkladu, měli byste čtyři Sub postupy, všechny se stejným názvem, ale se čtyřmi různými 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 nebo String 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é