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 nem szereplő operátor definíciója, amelyben az argumentum az osztály vagy a struktúra típusa.

  • 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 unary, és mindig a definiált operátort használja CType .

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 kulcsszót Widening Narrowing csak típuskonvertálási operátoron használja. Az operátorszimbólum mindig CType függvény egy típuskonvertálási operátor esetében.

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ás szintaxisa

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 az előre definiált operátorok esetében.

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

Dim testStruct As structurename

Dim testNewStruct As structurename = testStruct operátorokymbol 10

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átort + két veryLong érték hozzáadására és az eredményként kapott érték létrehozására veryLong határozza meg.

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