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

PartesParts

attrlist
Opcional.Optional. Vea lista de atributos.See Attribute List.

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

Overloads
Opcional.Optional. Vea sobrecargas.See Overloads.

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

Shadows
Opcional.Optional. Vea Shadows.See Shadows.

Widening
Obligatorio 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 una conversión de ampliación .Indicates that this operator procedure defines a Widening conversion. Vea "conversiones de ampliación y de restricción" en esta página de ayuda.See "Widening and Narrowing Conversions" on this Help page.

Narrowing
Obligatorio 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 una conversión de restricción .Indicates that this operator procedure defines a Narrowing conversion. Vea "conversiones de ampliación y de restricción" en esta página de ayuda.See "Widening and Narrowing Conversions" on this Help page.

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

operand1
Necesario.Required. El nombre y el tipo del 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
Requerido para los operadores binarios.Required for binary operators. 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 tienen la sintaxis y las partes siguientes:operand1 and operand2 have the following syntax and parts:

[ ByVal ] operandname [ As operandtype ]

PartePart DescripciónDescription
ByVal Opcional, pero el mecanismo de paso debe ser ByVal.Optional, but the passing mechanism must be ByVal.
operandname Necesario.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 sea 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 sea On .Optional unless Option Strict is On. Tipo de datos del valor que el procedimiento del operador devuelve.Data type of the value the operator procedure returns.

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

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

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

ObservacionesRemarks

Solo se puede usar Operator en una clase o estructura.You can use Operator only in a class or structure. Esto significa que el contexto de la declaración de un operador no puede ser un archivo de código fuente, un espacio de nombres, un módulo, una interfaz, un procedimiento o un 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 se puede especificar ByRef , Optional ni ParamArray para ninguno de los operandos.You cannot specify ByRef, Optional, or ParamArray for either operand.

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

La definición de un operador de este modo se denomina sobrecarga de operadores, tanto si se usa la Overloads palabra clave como si no.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 de 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 también el otro.If you define either operator of such a pair, you must define the other as well. Los pares coincidentes son los siguientes:The matched pairs are the following:

  • = y <>= and <>

  • > y <> and <

  • >= y <=>= and <=

  • IsTrue y IsFalseIsTrue and IsFalse

Restricciones de tipos de datosData Type Restrictions

Cada operador que defina debe incluir la clase o estructura en la que se define.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 lo siguiente:This means that the class or structure must appear as the data type of the following:

  • 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 restricciones de tipo de datos adicionales, como se indica a continuación:Certain operators have additional data type restrictions, as follows:

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

  • Si define los << operadores y >> , 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 al 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 aunque ninguno de los operandos sea 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

Los And Or operadores,, Not y Xor pueden realizar operaciones lógicas o bit a bit 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, solo puede definir 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 se puede definir el AndAlso operador directamente con una 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 desea usar 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 la que se 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 la que ha definido And .You have defined the IsFalse operator on the class or structure on which you have defined And.

Del mismo modo, puede utilizar OrElse si ha definido Or en los mismos operandos, con el tipo de valor devuelto de la clase o la estructura, y ha definido 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

Una conversión de ampliación siempre se realiza correctamente en tiempo de ejecución, mientras que una 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 que un procedimiento de conversión es Widening , el código de procedimiento no debe generar ningún error.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.

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

  • Debe controlar cualquier devolución de error de cualquier procedimiento al que llame.It must handle any error returns from any procedures it calls.

Si existe la posibilidad de que un procedimiento de conversión no se lleve a cabo correctamente o de que pueda provocar una excepción no controlada, debe declararlo 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

En el ejemplo de código siguiente Operator se usa la instrucción para definir el contorno de una estructura que incluye procedimientos de operador para los And Or operadores,, IsFalse y 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. And y Or cada uno de ellos 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 cada toman un solo operando de tipo abc y devuelven Boolean .IsFalse and IsTrue each take a single operand of type abc and return Boolean. Estas definiciones permiten que el código de llamada use 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