Dela via


Operatorprocedurer (Visual Basic)

En operatorprocedur är en serie Visual Basic-instruktioner som definierar beteendet för en standardoperator (till exempel *, <>eller And) för en klass eller struktur som du har definierat. Detta kallas även för operatoröverlagring.

När du ska definiera operatorprocedurer

När du har definierat en klass eller struktur kan du deklarera variabler som av den typen av klass eller struktur. Ibland måste en sådan variabel delta i en åtgärd som en del av ett uttryck. För att göra detta måste det vara en operand för en operator.

Visual Basic definierar operatorer endast för dess grundläggande datatyper. Du kan definiera beteendet för en operator när en eller båda operanderna är av typen för din klass eller struktur.

Mer information finns i Operator-instruktion.

Typer av operatörsprocedur

En operatorprocedur kan vara en av följande typer:

  • En definition av en unary-operator där argumentet är av typen för din klass eller struktur.

  • En definition av en binär operator där minst ett av argumenten är av typen av klass eller struktur.

  • En definition av en konverteringsoperator där argumentet är av typen för din klass eller struktur.

  • En definition av en konverteringsoperator som returnerar typen av klass eller struktur.

Konverteringsoperatorer är alltid ofarliga och du använder CType alltid som den operator som du definierar.

Deklarationssyntax

Syntaxen för att deklarera en operatorprocedur är följande:

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

' Statements of the operator procedure.

End Operator

Du använder endast nyckelordet Widening eller Narrowing på en typkonverteringsoperator. Operatorsymbolen är alltid CType-funktion för en typkonverteringsoperator.

Du deklarerar två operander för att definiera en binär operator och deklarerar en operand för att definiera en unary-operator, inklusive en typkonverteringsoperator. Alla operander måste deklareras ByVal.

Du deklarerar varje operand på samma sätt som du deklarerar parametrar för underprocedurer.

Datatyp

Eftersom du definierar en operator för en klass eller struktur som du har definierat måste minst en av operanderna vara av datatypen för den klassen eller strukturen. För en typkonverteringsoperator måste antingen operanden eller returtypen vara av klassens eller strukturens datatyp.

Mer information finns i Operator-instruktion.

Anropssyntax

Du anropar en operatorprocedur implicit med operatorsymbolen i ett uttryck. Du anger operanderna på samma sätt som fördefinierade operatorer.

Syntaxen för ett implicit anrop till en operatorprocedur är följande:

Dim testStruct As structurename

Dim testNewStruct As structurename = testStruct operatorsymbol 10

Bild av deklaration och samtal

I följande struktur lagras ett signerat 128-bitars heltalsvärde som komponenter med hög ordning och låg ordning. Den definierar operatorn + för att lägga till två veryLong värden och generera ett resulterande veryLong värde.

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

I följande exempel visas ett typiskt anrop till operatorn + som definierats på veryLong.

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

Se även