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
neboByRef
, 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
Otevřete nový projekt a přidejte třídu s názvem
TaxClass
.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
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
Přidejte do formuláře tlačítko a volejte proceduru
ShowTax
Button1_Click
z události tlačítka.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.