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