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


Operátori eljárások (Visual Basic)

Az operátori eljárás olyan Visual Basic-utasítások sorozata, amelyek meghatározzák egy szabványos operátor (például *, <>vagy And) viselkedését egy ön által definiált osztályon vagy struktúrán. Ezt operátor-túlterhelésnek is nevezik.

Mikor kell operátori eljárásokat definiálni?

Amikor definiált egy osztályt vagy struktúrát, deklarálhat változókat az adott osztály vagy struktúra típusának. Előfordulhat, hogy egy ilyen változónak egy kifejezés részeként részt kell vennie egy műveletben. Ehhez egy operátor operandusának kell lennie.

A Visual Basic csak az alapvető adattípusokon definiál operátorokat. Az operátorok viselkedését akkor határozhatja meg, ha az egyik vagy mindkét operandus az osztály vagy a struktúra típusa.

További információ: Operátori utasítás.

Az operátori eljárás típusai

Az operátori eljárás az alábbi típusok egyike lehet:

  • Egy unáris operátor definíciója, ahol az argumentum az osztály vagy struktúra típusú.

  • Bináris operátor definíciója, amelyben az argumentumok legalább egyike az osztály vagy a struktúra típusa.

  • Egy konverziós operátor definíciója, amelyben az argumentum az osztály vagy a struktúra típusa.

  • Egy konverziós operátor definíciója, amely az osztály vagy a struktúra típusát adja vissza.

A konverziós operátorok mindig egyváltozósak, és CType-t használja mindig a definiálandó operátorként.

Deklaráció szintaxisa

Az operátori eljárás deklarálásának szintaxisa a következő:

Public Shared [Widening | Narrowing] Operator operatorsymbol ( operand1 [,  operand2 ]) As datatype

' Statements of the operator procedure.

End Operator

A(z) Widening vagy Narrowing kulcsszót csak a típuskonvertálási operátoron használhatja. Az operátorszimbólum mindig CType operátor egy típuskonvertálási operátorhoz.

Két operandust deklarál egy bináris operátor definiálásához, és egy operandust deklarál egy nem szereplő operátor definiálásához, beleértve a típuskonvertálási operátort is. Minden operandust deklarálni ByValkell.

Az egyes operandusokat ugyanúgy deklarálja, mint az aleljárások paramétereit.

Adattípus

Mivel egy operátort definiál egy ön által definiált osztályon vagy struktúrán, az operandusok legalább egyikének az adott osztály vagy struktúra adattípusához kell tartoznia. Típuskonvertálási operátor esetén az operandusnak vagy a visszatérési típusnak az osztály vagy a struktúra adattípusának kell lennie.

További részletekért lásd: Operátori utasítás.

Hívási szintaxis

Egy operátori eljárást implicit módon hív meg egy kifejezés operátorszimbólumával. Az operandusokat ugyanúgy adja meg, mint amikor előre definiált operátorokat használ.

Az operátori eljárás implicit hívásának szintaxisa a következő:

Dim testStruct As structurename

Dim testNewStruct As structurename= testStructoperátorokymbol10

A deklaráció és a hívás illusztrációja

Az alábbi struktúra egy aláírt 128 bites egész számértéket tárol a rendszerösszetevő nagy és alacsony sorrendű részeiként. Az + operátor két veryLong érték összeadására és egy veryLong érték eredményeként létrehozására szolgál.

Public Structure veryLong
    Dim highOrder As Long
    Dim lowOrder As Long
    Public Shared Operator +(ByVal v As veryLong, 
                             ByVal w As veryLong) As veryLong
        Dim sum As New veryLong
        sum = v
        Try
            sum.lowOrder += w.lowOrder
        Catch ex As System.OverflowException
            sum.lowOrder -= (Long.MaxValue - w.lowOrder + 1)
            sum.highOrder += 1
        End Try
        sum.highOrder += w.highOrder
        Return sum
    End Operator
End Structure

Az alábbi példa egy tipikus hívást mutat be a + megadott operátorhoz veryLong.

Dim v1, v2, v3 As veryLong
v1.highOrder = 1
v1.lowOrder = Long.MaxValue
v2.highOrder = 0
v2.lowOrder = 4
v3 = v1 + v2

Lásd még