Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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,SharedaStaticNázvy parametrů nebo názvy typových parametrů
Omezení parametrů typu (pro obecný postup)
Klíčová slova modifikátoru parametrů, například
ByRefaOptionalUrč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é
- Procedury
- Postupy: Definování více verzí procedury
- Jak na to: Volání přetížené procedury
- Jak na to: Přetížení procedury, která přijímá volitelné parametry
- Jak na to: Přetížit proceduru, která přebírá neomezený počet parametrů
- Zvážení při přetěžování postupů
- Řešení přetížení
- přetížení
- Obecné typy v jazyce Visual Basic