Operator StatementOperator Statement

Declara el símbolo del operador, los operandos y el código que definen un procedimiento de operador en una clase o estructura.Declares the operator symbol, operands, and code that define an operator procedure on a class or structure.

SintaxisSyntax

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

ElementosParts

attrlist
Opcional.Optional. Consulte lista de los atributos.See Attribute List.

Public
Obligatorio.Required. Indica que este procedimiento de operador tiene pública acceso.Indicates that this operator procedure has Public access.

Overloads
Opcional.Optional. Consulte sobrecargas.See Overloads.

Shared
Obligatorio.Required. Indica que este procedimiento de operador es un Shared procedimiento.Indicates that this operator procedure is a Shared procedure.

Shadows
Opcional.Optional. Consulte sombras.See Shadows.

Widening
Necesario para un operador de conversión a menos que especifique Narrowing.Required for a conversion operator unless you specify Narrowing. Indica que este procedimiento de operador define un Widening conversión.Indicates that this operator procedure defines a Widening conversion. Vea "Ampliación y Narrowing Conversions" en esta página de ayuda.See "Widening and Narrowing Conversions" on this Help page.

Narrowing
Necesario para un operador de conversión a menos que especifique Widening.Required for a conversion operator unless you specify Widening. Indica que este procedimiento de operador define un Narrowing conversión.Indicates that this operator procedure defines a Narrowing conversion. Vea "Ampliación y Narrowing Conversions" en esta página de ayuda.See "Widening and Narrowing Conversions" on this Help page.

operatorsymbol
Obligatorio.Required. El símbolo o el identificador del operador que define este procedimiento de operador.The symbol or identifier of the operator that this operator procedure defines.

operand1
Obligatorio.Required. El nombre y tipo de operando único de un operador unario (incluido un operador de conversión) o el operando izquierdo de un operador 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
Se requiere para los operadores binarios.Required for binary operators. El nombre y tipo del operando derecho de un operador binario.The name and type of the right operand of a binary operator.

operand1 y operand2 tiene la sintaxis y las partes siguientes:operand1 and operand2 have the following syntax and parts:

[ ByVal ] operandname [ As operandtype ]

PartePart DescripciónDescription
ByVal Debe ser opcional, pero el mecanismo de paso ByVal.Optional, but the passing mechanism must be ByVal.
operandname Obligatorio.Required. Nombre de la variable que representa este operando.Name of the variable representing this operand. Vea Declared Element Names.See Declared Element Names.
operandtype Opcional, a menos que Option Strict es On.Optional unless Option Strict is On. Tipo de datos de este operando.Data type of this operand.

type
Opcional, a menos que Option Strict es On.Optional unless Option Strict is On. Devuelve el tipo de datos del valor el procedimiento de operador.Data type of the value the operator procedure returns.

statements
Opcional.Optional. Bloque de instrucciones que se ejecuta el procedimiento de operador.Block of statements that the operator procedure runs.

returnvalue
Obligatorio.Required. El valor que el procedimiento de operador devuelve al código de llamada.The value that the operator procedure returns to the calling code.

End OperatorEnd Operator
Obligatorio.Required. Termina la definición de este procedimiento de operador.Terminates the definition of this operator procedure.

ComentariosRemarks

Puede usar Operator solo en una clase o estructura.You can use Operator only in a class or structure. Esto significa que el contexto de declaración para un operador no puede ser un archivo de código fuente, espacio de nombres, módulo, interfaz, procedimiento o bloque.This means the declaration context for an operator cannot be a source file, namespace, module, interface, procedure, or block. Para obtener más información, vea Declaration Contexts and Default Access Levels (Contextos de declaración y niveles de acceso predeterminados).For more information, see Declaration Contexts and Default Access Levels.

Todos los operadores deben ser Public Shared.All operators must be Public Shared. No puede especificar ByRef, Optional, o ParamArray para cualquiera de los operandos.You cannot specify ByRef, Optional, or ParamArray for either operand.

No puede usar el símbolo del operador o el identificador para contener un valor devuelto.You cannot use the operator symbol or identifier to hold a return value. Debe usar el Return instrucción y deben especificar un valor.You must use the Return statement, and it must specify a value. Cualquier número de Return instrucciones pueden aparecer en cualquier lugar en el procedimiento.Any number of Return statements can appear anywhere in the procedure.

Definición de un operador de esta manera se denomina sobrecarga de operadores, utilice o no el Overloads palabra clave.Defining an operator in this way is called operator overloading, whether or not you use the Overloads keyword. En la tabla siguiente se enumeran los operadores que se pueden definir.The following table lists the operators you can define.

TipoType OperadoresOperators
UnarioUnary +, -, IsFalse, IsTrue, Not+, -, IsFalse, IsTrue, Not
BinaryBinary +, -, *, /, \, &, ^, >>, <<, =, <>, >, >=, <, <=, And, Like, Mod, Or, Xor+, -, *, /, \, &, ^, >>, <<, =, <>, >, >=, <, <=, And, Like, Mod, Or, Xor
Conversión (unaria)Conversion (unary) CType

Tenga en cuenta que el = operador en la lista binaria es el operador de comparación, no el operador de asignación.Note that the = operator in the binary list is the comparison operator, not the assignment operator.

Al definir CType, debe especificar Widening o Narrowing.When you define CType, you must specify either Widening or Narrowing.

Pares coincidentesMatched Pairs

Debe definir ciertos operadores como pares coincidentes.You must define certain operators as matched pairs. Si define un operador de este tipo, debe definir el otro.If you define either operator of such a pair, you must define the other as well. Los pares correspondientes son los siguientes:The matched pairs are the following:

  • = y <>= and <>

  • > y <> and <

  • >= y <=>= and <=

  • IsTrue y IsFalseIsTrue and IsFalse

Restricciones de tipo de datosData Type Restrictions

Cada operador que define debe implicar la clase o estructura en el que se definen.Every operator you define must involve the class or structure on which you define it. Esto significa que la clase o estructura debe aparecer como el tipo de datos de las siguientes acciones:This means that the class or structure must appear as the data type of the following:

  • El operando de un operador unario.The operand of a unary operator.

  • Al menos uno de los operandos de un operador binario.At least one of the operands of a binary operator.

  • El operando o el tipo de valor devuelto de un operador de conversión.Either the operand or the return type of a conversion operator.

Ciertos operadores tienen datos adicionales que escriba las restricciones, como se indica a continuación:Certain operators have additional data type restrictions, as follows:

  • Si define la IsTrue y IsFalse operadores, deben devolver el Boolean tipo.If you define the IsTrue and IsFalse operators, they must both return the Boolean type.

  • Si define la << y >> operadores, ambos deben especificar el Integer tipo para el operandtype de operand2.If you define the << and >> operators, they must both specify the Integer type for the operandtype of operand2.

El tipo de valor devuelto no tiene que corresponder con el tipo de uno de los operandos.The return type does not have to correspond to the type of either operand. Por ejemplo, un operador de comparación como = o <> puede devolver Boolean incluso si ninguno de los operandos es Boolean.For example, a comparison operator such as = or <> can return Boolean even if neither operand is Boolean.

Operadores lógicos y bit a bitLogical and Bitwise Operators

El And, Or, Not, y Xor operadores pueden realizar operaciones bit a bit o lógicas en Visual Basic.The And, Or, Not, and Xor operators can perform either logical or bitwise operations in Visual Basic. Sin embargo, si define uno de estos operadores en una clase o estructura, puede definir solo su operación bit a bit.However, if you define one of these operators on a class or structure, you can define only its bitwise operation.

No puede definir la AndAlso operador directamente con un Operator instrucción.You cannot define the AndAlso operator directly with an Operator statement. Sin embargo, puede usar AndAlso si ha cumplido las condiciones siguientes:However, you can use AndAlso if you have fulfilled the following conditions:

  • Ha definido And en los mismos tipos de operando que se va a utilizar para AndAlso.You have defined And on the same operand types you want to use for AndAlso.

  • La definición de And devuelve el mismo tipo que la clase o estructura en el que ha definido.Your definition of And returns the same type as the class or structure on which you have defined it.

  • Ha definido el IsFalse operador en la clase o estructura en el que ha definido And.You have defined the IsFalse operator on the class or structure on which you have defined And.

De forma similar, puede usar OrElse si ha definido Or en los operandos de la mismos, se ha definido con el tipo de valor devuelto de la clase o estructura y IsTrue en la clase o estructura.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

Un una conversión de ampliación siempre se realiza correctamente en tiempo de ejecución, mientras que un conversión de restricción puede producir un error en tiempo de ejecución.A widening conversion always succeeds at run time, while a narrowing conversion can fail at run time. Para obtener más información, consulta Widening and Narrowing Conversions.For more information, see Widening and Narrowing Conversions.

Si declara un procedimiento de conversión Widening, el código de procedimiento no debe generar errores.If you declare a conversion procedure to be Widening, your procedure code must not generate any failures. Esto significa lo siguiente:This means the following:

  • Siempre debe devolver un valor válido de tipo type.It must always return a valid value of type type.

  • Deben controlar todas las posibles excepciones y otras condiciones de error.It must handle all possible exceptions and other error conditions.

  • Deben controlar los errores devueltos desde cualquier procedimiento al que llama.It must handle any error returns from any procedures it calls.

Si hay alguna posibilidad de que un procedimiento de conversión podría no realizarse correctamente o que TI puede provocar una excepción no controlada, debe declararla como 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.

EjemploExample

El siguiente ejemplo de código utiliza el Operator instrucción para definir el esquema de una estructura que incluye procedimientos de operador para el And, Or, IsFalse, y IsTrue operadores.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. And y Or cada toman dos operandos de tipo abc y tipo de valor devuelto abc.And and Or each take two operands of type abc and return type abc. IsFalse y IsTrue tomar un único operando de tipo abc y devolver Boolean.IsFalse and IsTrue each take a single operand of type abc and return Boolean. Estas definiciones de permitir que el código que realiza la llamada usar And, AndAlso, Or, y OrElse con operandos de 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

Vea tambiénSee also