Operator StatementOperator Statement

Dichiara il simbolo dell'operatore, gli operandi e il codice che definiscono una routine di operatore in una classe o una struttura.Declares the operator symbol, operands, and code that define an operator procedure on a class or structure.

SintassiSyntax

[ <attrlist> ] Public [ Overloads ] Shared [ Shadows ] [ Widening | Narrowing ]
Operator operatorsymbol ( operand1 [, operand2 ]) [ As [ <attrlist> ] type ]
    [ statements ]
    [ statements ]
    Return returnvalue
    [ statements ]
End Operator

PartiParts

attrlist
Facoltativa.Optional. Vedere elenco attributi.See Attribute List.

Public
Obbligatorio.Required. Indica che questa routine dell'operatore dispone di accesso pubblico .Indicates that this operator procedure has Public access.

Overloads
Facoltativa.Optional. Vedere Overload.See Overloads.

Shared
Obbligatorio.Required. Indica che questa routine dell'operatore è una procedura condivisa .Indicates that this operator procedure is a Shared procedure.

Shadows
Facoltativa.Optional. Vedere Shadows.See Shadows.

Widening
Obbligatorio per un operatore di conversione, a meno che non si specifichi Narrowing .Required for a conversion operator unless you specify Narrowing. Indica che questa routine dell'operatore definisce una conversione verso un tipo di contenuto più ampio .Indicates that this operator procedure defines a Widening conversion. Vedere "conversioni verso un tipo di ampliamento e riduzione" in questa pagina della guida.See "Widening and Narrowing Conversions" on this Help page.

Narrowing
Obbligatorio per un operatore di conversione, a meno che non si specifichi Widening .Required for a conversion operator unless you specify Widening. Indica che questa routine dell'operatore definisce una conversione verso un tipo di caratteri più piccolo .Indicates that this operator procedure defines a Narrowing conversion. Vedere "conversioni verso un tipo di ampliamento e riduzione" in questa pagina della guida.See "Widening and Narrowing Conversions" on this Help page.

operatorsymbol
Obbligatorio.Required. Simbolo o identificatore dell'operatore definito da questa routine di operatore.The symbol or identifier of the operator that this operator procedure defines.

operand1
Obbligatorio.Required. Il nome e il tipo del singolo operando di un operatore unario (incluso un operatore di conversione) o l'operando sinistro di un operatore binario.The name and type of the single operand of a unary operator (including a conversion operator) or the left operand of a binary operator.

operand2
Obbligatorio per gli operatori binari.Required for binary operators. Nome e tipo dell'operando di destra di un operatore binario.The name and type of the right operand of a binary operator.

operand1e operand2 presentano la sintassi e le parti seguenti:operand1 and operand2 have the following syntax and parts:

[ ByVal ] operandname [ As operandtype ]

PartePart DescrizioneDescription
ByVal Facoltativo, ma il meccanismo di passaggio deve essere ByVal.Optional, but the passing mechanism must be ByVal.
operandname Obbligatorio.Required. Nome della variabile che rappresenta questo operando.Name of the variable representing this operand. Vedere Declared Element Names.See Declared Element Names.
operandtype Facoltativo a meno che non Option Strict sia On .Optional unless Option Strict is On. Tipo di dati dell'operando.Data type of this operand.

type
Facoltativo a meno che non Option Strict sia On .Optional unless Option Strict is On. Tipo di dati del valore restituito dalla routine dell'operatore.Data type of the value the operator procedure returns.

statements
Facoltativa.Optional. Blocco di istruzioni eseguite dalla stored procedure.Block of statements that the operator procedure runs.

returnvalue
Obbligatorio.Required. Valore restituito dalla routine Operator al codice chiamante.The value that the operator procedure returns to the calling code.

End OperatorEnd Operator
Obbligatorio.Required. Termina la definizione di questa routine di operatore.Terminates the definition of this operator procedure.

CommentiRemarks

È possibile utilizzare Operator solo in una classe o una struttura.You can use Operator only in a class or structure. Ciò significa che il contesto di dichiarazione per un operatore non può essere un file di origine, uno spazio dei nomi, un modulo, un'interfaccia, una routine o un blocco.This means the declaration context for an operator cannot be a source file, namespace, module, interface, procedure, or block. Per altre informazioni, vedere Contesti delle dichiarazioni e livelli di accesso predefiniti.For more information, see Declaration Contexts and Default Access Levels.

Tutti gli operatori devono essere Public Shared .All operators must be Public Shared. Non è possibile specificare ByRef , Optional o ParamArray per uno degli operandi.You cannot specify ByRef, Optional, or ParamArray for either operand.

Non è possibile usare il simbolo dell'operatore o l'identificatore per mantenere un valore restituito.You cannot use the operator symbol or identifier to hold a return value. È necessario utilizzare l' Return istruzione ed è necessario specificare un valore.You must use the Return statement, and it must specify a value. Qualsiasi numero di Return istruzioni può comparire in qualsiasi punto della procedura.Any number of Return statements can appear anywhere in the procedure.

La definizione di un operatore in questo modo viene chiamata Overload degli operatori, indipendentemente dal fatto che si usi la Overloads parola chiave.Defining an operator in this way is called operator overloading, whether or not you use the Overloads keyword. La tabella seguente elenca gli operatori che è possibile definire.The following table lists the operators you can define.

TypeType OperatoriOperators
UnariaUnary +, -, IsFalse, IsTrue, Not+, -, IsFalse, IsTrue, Not
BinarioBinary +, -, *, /, \, &, ^, >>, <<, =, <>, >, >=, <, <=, And, Like, Mod, Or, Xor+, -, *, /, \, &, ^, >>, <<, =, <>, >, >=, <, <=, And, Like, Mod, Or, Xor
Conversione (unario)Conversion (unary) CType

Si noti che l'operatore = nell'elenco binario è l'operatore di confronto, non l'operatore di assegnazione.Note that the = operator in the binary list is the comparison operator, not the assignment operator.

Quando si definisce CType , è necessario specificare Widening o Narrowing .When you define CType, you must specify either Widening or Narrowing.

Coppie corrispondentiMatched Pairs

È necessario definire determinati operatori come coppie corrispondenti.You must define certain operators as matched pairs. Se si definisce uno degli operatori di tale coppia, è necessario definire anche l'altro.If you define either operator of such a pair, you must define the other as well. Le coppie corrispondenti sono le seguenti:The matched pairs are the following:

  • = e <>= and <>

  • > e <> and <

  • >= e <=>= and <=

  • IsTrue e IsFalseIsTrue and IsFalse

Restrizioni relative ai tipi di datiData Type Restrictions

Ogni operatore definito deve coinvolgere la classe o la struttura in cui viene definita.Every operator you define must involve the class or structure on which you define it. Ciò significa che la classe o la struttura deve essere visualizzata come tipo di dati degli elementi seguenti:This means that the class or structure must appear as the data type of the following:

  • Operando di un operatore unario.The operand of a unary operator.

  • Almeno uno degli operandi di un operatore binario.At least one of the operands of a binary operator.

  • L'operando o il tipo restituito di un operatore di conversione.Either the operand or the return type of a conversion operator.

Alcuni operatori hanno restrizioni aggiuntive per i tipi di dati, come indicato di seguito:Certain operators have additional data type restrictions, as follows:

  • Se si definiscono gli IsTrue IsFalse operatori e, devono entrambi restituire il Boolean tipo.If you define the IsTrue and IsFalse operators, they must both return the Boolean type.

  • Se si definiscono gli << >> operatori e, devono entrambi specificare il Integer tipo per l'oggetto operandtype di operand2 .If you define the << and >> operators, they must both specify the Integer type for the operandtype of operand2.

Il tipo restituito non deve corrispondere al tipo di uno degli operandi.The return type does not have to correspond to the type of either operand. Un operatore di confronto, ad esempio, = <> può essere restituito Boolean anche se nessuno degli operandi è Boolean .For example, a comparison operator such as = or <> can return Boolean even if neither operand is Boolean.

Operatori logici e bit per bitLogical and Bitwise Operators

Gli And Or operatori,, Not e Xor possono eseguire operazioni logiche o bit per bit in Visual Basic.The And, Or, Not, and Xor operators can perform either logical or bitwise operations in Visual Basic. Tuttavia, se si definisce uno di questi operatori in una classe o una struttura, è possibile definire solo l'operazione bit per bit.However, if you define one of these operators on a class or structure, you can define only its bitwise operation.

Non è possibile definire l' AndAlso operatore direttamente con un' Operator istruzione.You cannot define the AndAlso operator directly with an Operator statement. Tuttavia, è possibile usare AndAlso se sono state soddisfatte le condizioni seguenti:However, you can use AndAlso if you have fulfilled the following conditions:

  • È stato definito lo And stesso tipo di operando che si desidera utilizzare per AndAlso .You have defined And on the same operand types you want to use for AndAlso.

  • La definizione di And restituisce lo stesso tipo della classe o della struttura in cui è stato definito.Your definition of And returns the same type as the class or structure on which you have defined it.

  • È stato definito l' IsFalse operatore sulla classe o sulla struttura in cui è stato definito And .You have defined the IsFalse operator on the class or structure on which you have defined And.

Analogamente, è possibile usare OrElse se è stato definito Or negli stessi operandi, con il tipo restituito della classe o della struttura, ed è stato definito IsTrue sulla classe o sulla struttura.Similarly, you can use OrElse if you have defined Or on the same operands, with the return type of the class or structure, and you have defined IsTrue on the class or structure.

Widening and Narrowing ConversionsWidening and Narrowing Conversions

Una conversione verso un tipo di caratteri più ampio viene sempre eseguita in fase di esecuzione, mentre una conversione verso un tipo di caratteri più piccolo può avere esito negativoA widening conversion always succeeds at run time, while a narrowing conversion can fail at run time. Per altre informazioni, vedere Widening and Narrowing Conversions.For more information, see Widening and Narrowing Conversions.

Se si dichiara una procedura di conversione Widening , il codice della procedura non deve generare errori.If you declare a conversion procedure to be Widening, your procedure code must not generate any failures. Ciò comporta quanto segue:This means the following:

  • Deve sempre restituire un valore valido di tipo type .It must always return a valid value of type type.

  • Deve gestire tutte le possibili eccezioni e altre condizioni di errore.It must handle all possible exceptions and other error conditions.

  • Deve gestire eventuali ritorni degli errori da qualsiasi routine chiamata.It must handle any error returns from any procedures it calls.

Se è possibile che una procedura di conversione potrebbe non riuscire o che potrebbe causare un'eccezione non gestita, è necessario dichiararla come Narrowing .If there is any possibility that a conversion procedure might not succeed, or that it might cause an unhandled exception, you must declare it to be Narrowing.

EsempioExample

Nell'esempio di codice seguente viene utilizzata l' Operator istruzione per definire il contorno di una struttura che include routine di operatore per gli And operatori, Or , IsFalse e IsTrue .The following code example uses the Operator statement to define the outline of a structure that includes operator procedures for the And, Or, IsFalse, and IsTrue operators. Ande Or accettano due operandi di tipo abc e tipo restituito abc .And and Or each take two operands of type abc and return type abc. IsFalsee IsTrue accettano un solo operando di tipo abc e restituiscono Boolean .IsFalse and IsTrue each take a single operand of type abc and return Boolean. Queste definizioni consentono al codice chiamante di usare And , AndAlso , Or e OrElse con operandi di tipo abc .These definitions allow the calling code to use And, AndAlso, Or, and OrElse with operands of type 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

Vedere ancheSee also