Delen via


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, Optionalof 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, -, IsTrueNot
Binary +, , -, , , \, , &, , =>Mod>=<<=LikeOr<<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 en IsFalse

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 operatoren IsFalse definieert, moeten ze beide het Boolean type retourneren.

  • Als u de << operatoren >> definieert, moeten ze beide het Integer type voor het operandtype operand2type 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 Andoperators , Oren NotXor 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 gedefinieerd And.

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 Wideningdeclareert, mag uw procedurecode geen fouten genereren. Dit betekent het volgende:

  • Het moet altijd een geldige waarde van het type typeretourneren.

  • 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, Oren IsFalseoperators 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, AndAlsoOren 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

Zie ook