Megosztás a következőn keresztül:


Túlterhelt tulajdonságok és metódusok (Visual Basic)

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 ByVal vagy ByRef, 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ót Overloads név és aláírás alapján árnyékoláskor használja a rendszer, a rendszer a tag származtatott osztályát használja ahelyett, hogy az alaposztályban implementáció lenne, és az adott tag összes többi 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 decedents példányai számára.

A Overloads módosítók és Shadows a módosítók nem használhatók ugyanazzal a tulajdonsággal vagy módszerrel.

Példa

Az alábbi példa túlterhelt metódusokat hoz létre, amelyek elfogadják a dollárösszeget String vagy Decimal annak ábrázolását, és visszaadják a forgalmi adót tartalmazó sztringet.

A példa használata túlterhelt metódus létrehozásához

  1. Nyisson meg egy új projektet, és adjon hozzá egy osztályt TaxClass.

  2. Adja hozzá az alábbi kódot a TaxClass osztá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 Class
    
  3. Adja 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 Sub
    
  4. Adjon hozzá egy gombot az űrlaphoz, és hívja meg az ShowTax eljárást a Button1_Click gomb eseményéből.

  5. Futtassa a projektet, és kattintson az űrlap gombra a túlterhelt ShowTax eljá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 usd" 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 usd" jelenik meg.

Lásd még