Operatorinstructie
Declareert het operatorsymbool, operanden en code waarmee een operatorprocedure voor een klasse of structuur wordt gedefinieerd.
Syntaxis
[ <attrlist> ] Public [ Overloads ] Shared [ Shadows ] [ Widening | Narrowing ]
Operator operatorsymbol ( operand1 [, operand2 ]) [ As [ <attrlist> ] type ]
[ statements ]
[ statements ]
Return returnvalue
[ statements ]
End Operator
generator
attrlist
Optioneel. Zie de lijst met kenmerken.
Public
Vereist. Geeft aan dat deze operatorprocedure openbare toegang heeft.
Overloads
Optioneel. Zie Overloads.
Shared
Vereist. Geeft aan dat deze operatorprocedure een gedeelde procedure is.
Shadows
Optioneel. Zie schaduwen.
Widening
Vereist voor een conversieoperator, tenzij u opgeeft Narrowing
. Geeft aan dat deze operatorprocedure een Widening-conversie definieert. Zie "Widening and Narrowing Conversions" (Conversies uitbreiden en verfijnen) op deze Help-pagina.
Narrowing
Vereist voor een conversieoperator, tenzij u opgeeft Widening
. Geeft aan dat deze operatorprocedure een narrowing-conversie definieert. Zie "Widening and Narrowing Conversions" (Conversies uitbreiden en verfijnen) op deze Help-pagina.
operatorsymbol
Vereist. Het symbool of de id van de operator die door deze operatorprocedure wordt gedefinieerd.
operand1
Vereist. De naam en het type van de enkele operand van een unaire operator (inclusief een conversieoperator) of de linkeroperand van een binaire operator.
operand2
Vereist voor binaire operators. De naam en het type van de rechteroperand van een binaire operator.
operand1
en operand2
de volgende syntaxis en onderdelen hebben:
[ ByVal ] operandname [ As operandtype ]
Onderdeel | Beschrijving |
---|---|
ByVal |
Optioneel, maar het doorgegeven mechanisme moet ByVal zijn. |
operandname |
Vereist. Naam van de variabele die deze operand vertegenwoordigt. Zie Gedeclareerde elementnamen. |
operandtype |
Optioneel, tenzij Option Strict .On Gegevenstype van deze operand. |
type
Optioneel, tenzij Option Strict
.On
Gegevenstype van de waarde die de operatorprocedure retourneert.
statements
Optioneel. Blok met instructies die door de operatorprocedure worden uitgevoerd.
returnvalue
Vereist. De waarde die de operatorprocedure retourneert naar de aanroepende code.
End
Operator
Vereist. Hiermee wordt de definitie van deze operatorprocedure beëindigd.
Opmerkingen
U kunt alleen in een klas of structuur gebruiken Operator
. Dit betekent dat de declaratiecontext voor een operator geen bronbestand, naamruimte, module, interface, procedure of blok kan zijn. Zie Declaratiecontexten en standaardtoegangsniveaus voor meer informatie.
Alle operators moeten zijn Public Shared
. U kunt geen operand opgeven ByRef
, Optional
of ParamArray
voor een van beide operanden.
U kunt het operatorsymbool of de id niet gebruiken om een retourwaarde op te geven. U moet de Return
instructie gebruiken en er moet een waarde worden opgegeven. Een willekeurig aantal Return
instructies kan overal in de procedure worden weergegeven.
Het definiëren van een operator op deze manier wordt overbelasting van operatoren genoemd, ongeacht of u het Overloads
trefwoord gebruikt. De volgende tabel bevat de operators die u kunt definiëren.
Type | Operators |
---|---|
Unair | + IsFalse , - , IsTrue Not |
Binary | + , , - , , , \ , , & , , = > Mod >= < <= Like Or << And >> <> ^ / * Xor |
Conversie (unaire) | CType |
De operator in de binaire lijst is de =
vergelijkingsoperator, niet de toewijzingsoperator.
Wanneer u definieert CType
, moet u een van beide opgeven Widening
of Narrowing
.
Overeenkomende paren
U moet bepaalde operators definiëren als overeenkomende paren. Als u een van de operatoren van een dergelijk paar definieert, moet u ook de andere operator definiëren. De overeenkomende paren zijn het volgende:
=
en<>
>
en<
>=
en<=
IsTrue
enIsFalse
Beperkingen voor gegevenstypen
Elke operator die u definieert, moet betrekking hebben op de klasse of structuur waarop u deze definieert. Dit betekent dat de klasse of structuur moet worden weergegeven als het gegevenstype van het volgende:
De operand van een unaire operator.
Ten minste één van de operanden van een binaire operator.
De operand of het retourtype van een conversieoperator.
Bepaalde operators hebben als volgt aanvullende beperkingen voor gegevenstypen:
Als u de
IsTrue
operatorenIsFalse
definieert, moeten ze beide hetBoolean
type retourneren.Als u de
<<
operatoren>>
definieert, moeten ze beide hetInteger
type voor hetoperandtype
operand2
type opgeven.
Het retourtype hoeft niet overeen te komen met het type operand. Een vergelijkingsoperator zoals =
of <>
kan bijvoorbeeld retourneren Boolean
, zelfs als geen van beide operanden is Boolean
.
Logische en bitsgewijze operators
De And
operators , Or
en Not
Xor
operators kunnen logische of bitsgewijze bewerkingen uitvoeren in Visual Basic. Als u echter een van deze operators definieert voor een klasse of structuur, kunt u alleen de bitsgewijze bewerking definiëren.
U kunt de AndAlso
operator niet rechtstreeks definiëren met een Operator
instructie. U kunt echter wel gebruiken AndAlso
als u aan de volgende voorwaarden hebt voldaan:
U hebt gedefinieerd
And
voor dezelfde operandtypen die u wilt gebruiken.AndAlso
Uw definitie van
And
retourneert hetzelfde type als de klasse of structuur waarop u deze hebt gedefinieerd.U hebt de
IsFalse
operator gedefinieerd voor de klasse of structuur waarop u hebt gedefinieerdAnd
.
U kunt ook gebruiken OrElse
als u hebt gedefinieerd Or
voor dezelfde operanden, met het retourtype van de klasse of structuur en u hebt gedefinieerd IsTrue
voor de klasse of structuur.
Conversies breder maken en verkleinen
Een widening conversie slaagt altijd tijdens runtime, terwijl een narrowing conversie kan mislukken tijdens runtime. Zie Widening and Narrowing Conversions (Widening and Narrowing Conversions) voor meer informatie.
Als u een conversieprocedure Widening
declareert, mag uw procedurecode geen fouten genereren. Dit betekent het volgende:
Het moet altijd een geldige waarde van het type
type
retourneren.Het moet alle mogelijke uitzonderingen en andere foutvoorwaarden afhandelen.
Het moet eventuele fouten verwerken die worden geretourneerd door procedures die worden aanroepen.
Als er een mogelijkheid is dat een conversieprocedure niet slaagt of dat deze een onverwerkte uitzondering kan veroorzaken, moet u deze declareren.Narrowing
Opmerking
In het volgende codevoorbeeld wordt de Operator
instructie gebruikt om het overzicht te definiëren van een structuur met operatorprocedures voor de And
, Or
en IsFalse
operators IsTrue
. And
en Or
elk nemen twee operanden van het type abc
en retourtype abc
. IsFalse
en IsTrue
elke nemen één operand van het type abc
en retourneren Boolean
. Met deze definities kan de aanroepende code worden gebruiktAnd
, AndAlso
Or
en OrElse
met operanden van het typeabc
.
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