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
Obligatoriska. Anger att den här operatorproceduren har offentlig åtkomst.

Overloads
Valfritt. Se Överlagringar.

Shared
Obligatoriska. 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
Obligatoriska. Symbolen eller identifieraren för operatorn som den här operatorproceduren definierar.

operand1
Obligatoriska. 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 Obligatoriska. 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
Obligatoriska. Värdet som operatorproceduren returnerar till den anropande koden.

End Operator
Obligatoriska. 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, 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 Operatorer
Unär +, -, IsFalse, , , IsTrueNot
Binära +, -, *, /, \, &, ^, >>, <<, =, <>, >, , >=, <, <=, 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 <=

  • IsTrue och IsFalse

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 och IsFalse måste båda returnera Boolean typen.

  • Om du definierar operatorerna << och >> måste båda ange Integer typen för operandtype .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, 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 And på samma operandtyper som du vill använda för AndAlso.

  • 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 definierat And.

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

Se även