Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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 ]
| Del | 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.
Anmärkningar
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, Optionaleller 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 | Operatörer |
|---|---|
| Unär |
+, -, IsFalse, , , IsTrueNot |
| Binär |
+, -, *, /, \, &, ^, >>, <<, =, <>, >, , >=, <, <=, And, , Like, Mod, OrXor |
| Konvertering (unary) | CType |
Observera att operatorn = i den binära listan är jämförelseoperatorn, inte tilldelningsoperatorn.
När du definierar CTypemå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<=IsTrueochIsFalse
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
IsTrueochIsFalsemåste båda returneraBooleantypen.Om du definierar operatorerna
<<och>>måste båda angeIntegertypen 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 och bitvisa operatorer
Operatorerna And, Or, Notoch 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
Andpå samma operandtyper som du vill använda förAndAlso.Din definition av
Andreturnerar samma typ som den klass eller struktur som du har definierat den för.Du har definierat operatorn för
IsFalseklassen 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 Wideningfå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, IsFalseoch 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, Oroch 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