Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A túlterhelés több eljárás, példánykonstruktor vagy tulajdonság létrehozása egy azonos nevű, de különböző argumentumtípusú osztályban.
A használat túlterhelése
A túlterhelés különösen akkor hasznos, ha az objektummodell azt diktálja, hogy azonos neveket használjon a különböző adattípusokon működő eljárásokhoz. Például egy osztály, amely több különböző adattípust jeleníthet meg, az alábbihoz hasonló eljárásokkal rendelkezhet Display :
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
Túlterhelés nélkül külön neveket kell létrehoznia az egyes eljárásokhoz, még akkor is, ha ugyanazt teszik, mint a következő:
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
A túlterhelés megkönnyíti a tulajdonságok vagy metódusok használatát, mivel számos használható adattípust biztosít. A korábban tárgyalt túlterhelt Display metódus például a következő kódsorok bármelyikével hívható meg:
' 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)
Futásidőben a Visual Basic a megfelelő eljárást hívja meg a megadott paraméterek adattípusai alapján.
Túlterhelési szabályok
Egy osztályhoz túlterhelt tagot úgy hozhat létre, hogy két vagy több azonos nevű tulajdonságot vagy metódust ad hozzá. A túlterhelt származtatott tagok kivételével minden túlterhelt tagnak eltérő paraméterlistával kell rendelkeznie, és a következő elemek nem használhatók megkülönböztető funkcióként egy tulajdonság vagy eljárás túlterhelése esetén:
A tagra vonatkozó módosítók, például
ByValvagyByRef, a tag paraméterei.Paraméterek nevei
Az eljárások visszatérési típusai
A Overloads kulcsszó túlterhelés esetén nem kötelező, de ha bármely túlterhelt tag használja a Overloads kulcsszót, akkor az azonos nevű többi túlterhelt tagnak is meg kell adnia ezt a kulcsszót.
A származtatott osztályok túlterhelhetik az örökölt tagokat olyan tagokkal, amelyek azonos paraméterekkel és paramétertípusokkal rendelkeznek. Ezt a folyamatot név és aláírás alapján árnyékolásnak nevezzük. Ha a kulcsszó Overloads név és aláírás által történő árnyékolás során van használva, a tag származtatott osztálybeli megvalósítása lesz alkalmazva, ahelyett, hogy az alaposztálybeli megvalósítás lenne használva, és az adott tag minden másik túlterhelése elérhető lesz a származtatott osztály példányai számára.
Ha a Overloads kulcsszó nincs megadva, amikor egy öröklött tagot olyan taggal terhel túl, amely azonos paraméterekkel és paramétertípusokkal rendelkezik, akkor a túlterhelést név szerint árnyékolásnak nevezzük. A név szerinti árnyékolás a tag örökölt implementációját váltja fel, és az összes többi túlterhelést elérhetetlenné teszi a származtatott osztály és annak leszármazottjai számára.
A Overloads és Shadows módosítók nem használhatók ugyanazon tulajdonsággal vagy módszerrel.
példa
Az alábbi példa olyan túlterhelt metódusokat hoz létre, amelyek vagy a dollár összegének String vagy Decimal reprezentációját fogadják el, és visszaadják a forgalmi adót tartalmazó stringet.
A példa felhasználása egy túlterhelt metódus létrehozására
Nyisson meg egy új projektet, és adjon hozzá egy osztályt
TaxClass.Adja hozzá az alábbi kódot a
TaxClassosztályhoz.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 ClassAdja hozzá az alábbi eljárást az űrlaphoz.
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 SubAdjon hozzá egy gombot az űrlaphoz, és hívja meg az
ShowTaxeljárást aButton1_Clickgomb eseményéből.Futtassa a projektet, és kattintson a gombra az űrlapon a túlterhelt
ShowTaxeljárás teszteléséhez.
Futásidőben a fordító kiválasztja a megfelelő túlterhelt függvényt, amely megfelel a használt paramétereknek. Amikor a gombra kattint, a rendszer először meghívja a túlterhelt metódust egy Price sztringet tartalmazó paraméterrel, és a következő üzenettel: "Az ár sztring. „Az adó 5,12 dollár” jelenik meg.
TaxAmount a rendszer második alkalommal meghívja egy Decimal értékkel, és a következő üzenettel: "Az ár decimális. „Az adó 5,12 dollár” jelenik meg.