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
,Shared
aStatic
Názvy parametrů nebo typů
Omezení parametrů typu (pro obecný postup)
Klíčová slova modifikátoru parametrů, například
ByRef
aOptional
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é
- Procedury
- Postupy: Definice více verzí procedury
- Postupy: Volání přetížené procedury
- Postupy: Přetížení procedury, která přebírá nepovinné parametry
- Postupy: Přetížení procedury, která přebírá nekonečný počet parametrů
- Aspekty přetížení procedur
- Řešení přetížení
- Overloads
- Obecné typy v jazyce Visual Basic