Operatoruttryck
Deklarerar operatorsymbolen, operanderna och koden som definierar en operatorprocedur för en klass eller struktur.
Syntax
[ <attrlist> ] Public [ Overloads ] Shared [ Shadows ] [ Widening | Narrowing ]
Operator operatorsymbol ( operand1 [, operand2 ]) [ As [ <attrlist> ] type ]
[ statements ]
[ statements ]
Return returnvalue
[ statements ]
End Operator
Delar
attrlist
Valfritt. Se Attributlista.
Public
Obligatoriskt. Anger att den här operatorproceduren har offentlig åtkomst.
Overloads
Valfritt. Se Överlagringar.
Shared
Obligatoriskt. Anger att den här operatorproceduren är en delad procedur.
Shadows
Valfritt. Se Skuggor.
Widening
Krävs för en konverteringsoperator om du inte anger Narrowing
. Anger att den här operatorproceduren definierar en utvidgningskonvertering . Se "Bredda och begränsa konverteringar" på den här hjälpsidan.
Narrowing
Krävs för en konverteringsoperator om du inte anger Widening
. Anger att den här operatorproceduren definierar en begränsad konvertering. Se "Bredda och begränsa konverteringar" på den här hjälpsidan.
operatorsymbol
Obligatoriskt. Symbolen eller identifieraren för operatorn som den här operatorproceduren definierar.
operand1
Obligatoriskt. Namn och typ av enskild operand för en unary-operator (inklusive en konverteringsoperator) eller den vänstra operanden för en binär operator.
operand2
Krävs för binära operatorer. Namn och typ av rätt operand för en binär operator.
operand1
och operand2
har följande syntax och delar:
[ ByVal ] operandname [ As operandtype ]
Delvis | beskrivning |
---|---|
ByVal |
Valfritt, men överföringsmekanismen måste vara ByVal. |
operandname |
Obligatoriskt. Namnet på variabeln som representerar den här operanden. Se Deklarerade elementnamn. |
operandtype |
Valfritt om inte Option Strict är On . Datatyp för den här operanden. |
type
Valfritt om inte Option Strict
är On
. Datatyp för värdet som operatorproceduren returnerar.
statements
Valfritt. Block med instruktioner som operatorproceduren kör.
returnvalue
Obligatoriskt. Värdet som operatorproceduren returnerar till den anropande koden.
End
Operator
Obligatoriskt. Avslutar definitionen av den här operatorproceduren.
Kommentarer
Du kan bara använda Operator
i en klass eller struktur. Det innebär att deklarationskontexten för en operator inte kan vara en källfil, ett namnområde, en modul, ett gränssnitt, en procedur eller ett block. Mer information finns i Deklarationskontexter och standardåtkomstnivåer.
Alla operatorer måste vara Public Shared
. Du kan inte ange ByRef
, Optional
eller ParamArray
för någon av operanderna.
Du kan inte använda operatorsymbolen eller identifieraren för att lagra ett returvärde. Du måste använda -instruktionen Return
och den måste ange ett värde. Valfritt antal Return
instruktioner kan visas var som helst i proceduren.
Att definiera en operator på det här sättet kallas för operatoröverlagring, oavsett om du använder nyckelordet Overloads
eller inte. I följande tabell visas de operatorer som du kan definiera.
Typ | Operatorer |
---|---|
Unär | + , - , IsFalse , , , IsTrue Not |
Binära | + , - , * , / , \ , & , ^ , >> , << , = , <> , > , , >= , < , <= , And , , Like , Mod , Or Xor |
Konvertering (unary) | CType |
Observera att operatorn =
i den binära listan är jämförelseoperatorn, inte tilldelningsoperatorn.
När du definierar CType
måste du ange antingen Widening
eller Narrowing
.
Matchade par
Du måste definiera vissa operatorer som matchade par. Om du definierar någon av operatorerna för ett sådant par måste du också definiera det andra. De matchade paren är följande:
=
och<>
>
och<
>=
och<=
IsTrue
ochIsFalse
Begränsningar för datatyp
Varje operator som du definierar måste omfatta den klass eller struktur som du definierar den för. Det innebär att klassen eller strukturen måste visas som datatypen för följande:
Operand av en unary operatör.
Minst en av operanderna för en binär operator.
Antingen operanden eller returtypen för en konverteringsoperator.
Vissa operatorer har ytterligare datatypsbegränsningar enligt följande:
Om du definierar operatorerna
IsTrue
ochIsFalse
måste båda returneraBoolean
typen.Om du definierar operatorerna
<<
och>>
måste båda angeInteger
typen föroperandtype
.operand2
Returtypen behöver inte motsvara typen av operand. En jämförelseoperator som =
eller <>
kan till exempel returnera Boolean
även om ingen av operanderna är Boolean
.
Logiska operatorer och bitvis operatorer
Operatorerna And
, Or
, Not
och Xor
kan utföra antingen logiska eller bitvis åtgärder i Visual Basic. Men om du definierar en av dessa operatorer i en klass eller struktur kan du bara definiera dess bitvis åtgärd.
Du kan inte definiera operatorn AndAlso
direkt med en Operator
-instruktion. Du kan dock använda AndAlso
om du har uppfyllt följande villkor:
Du har definierat
And
på samma operandtyper som du vill använda förAndAlso
.Din definition av
And
returnerar samma typ som den klass eller struktur som du har definierat den för.Du har definierat operatorn för
IsFalse
klassen eller strukturen som du har definieratAnd
.
På samma sätt kan du använda OrElse
om du har definierat Or
på samma operander, med returtypen för klassen eller strukturen, och du har definierat IsTrue
i klassen eller strukturen.
Utvidga och begränsa konverteringar
En bredare konvertering lyckas alltid vid körning, medan en begränsad konvertering kan misslyckas vid körning. Mer information finns i Widening and Narrowing Conversions (Bredda och begränsa konverteringar).
Om du deklarerar att en konverteringsprocedur är Widening
får din procedurkod inte generera några fel. Detta innebär följande:
Det måste alltid returnera ett giltigt värde av typen
type
.Den måste hantera alla möjliga undantag och andra feltillstånd.
Den måste hantera eventuella fel som returneras från alla procedurer som anropas.
Om det finns en möjlighet att en konverteringsprocedur kanske inte lyckas, eller om det kan orsaka ett ohanterat undantag, måste du deklarera att det är Narrowing
.
Exempel
I följande kodexempel används -instruktionen Operator
för att definiera dispositionen för en struktur som innehåller operatorprocedurer för operatorerna And
, Or
, IsFalse
och IsTrue
. And
och var och Or
en tar två operander av typen abc
och returtypen abc
. IsFalse
och var och IsTrue
en tar en enda operand av typen abc
och returnerar Boolean
. Dessa definitioner tillåter att anropande kod använder And
, AndAlso
, Or
och OrElse
med operander av typen abc
.
Public Structure abc
Dim d As Date
Public Shared Operator And(ByVal x As abc, ByVal y As abc) As abc
Dim r As New abc
' Insert code to calculate And of x and y.
Return r
End Operator
Public Shared Operator Or(ByVal x As abc, ByVal y As abc) As abc
Dim r As New abc
' Insert code to calculate Or of x and y.
Return r
End Operator
Public Shared Operator IsFalse(ByVal z As abc) As Boolean
Dim b As Boolean
' Insert code to calculate IsFalse of z.
Return b
End Operator
Public Shared Operator IsTrue(ByVal z As abc) As Boolean
Dim b As Boolean
' Insert code to calculate IsTrue of z.
Return b
End Operator
End Structure