Operator Statement

Declara el símbolo del operador, los operandos y el código que definen un procedimiento de operador en una clase o estructura.

Sintaxis

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

Partes

attrlist
Opcional. Vea Lista de atributos.

Public
Necesario. Indica que este procedimiento de operador tiene acceso público.

Overloads
Opcional. Vea Sobrecargas.

Shared
Necesario. Indica que este procedimiento de operador es un procedimiento compartido.

Shadows
Opcional. Vea Sombras.

Widening
Obligatorio para un operador de conversión a menos que especifique Narrowing . Indica que este procedimiento de operador define una conversión de ampliación. Consulte "Widening and Narrowing Conversions" (Conversiones de ampliación y reducción) en esta página de Ayuda.

Narrowing
Obligatorio para un operador de conversión a menos que especifique Widening . Indica que este procedimiento de operador define una conversión de reducción. Consulte "Widening and Narrowing Conversions" (Conversiones de ampliación y reducción) en esta página de Ayuda.

operatorsymbol
Necesario. Símbolo o identificador del operador que define este procedimiento de operador.

operand1
Necesario. Nombre y tipo del operando único de un operador unario (incluido un operador de conversión) o del operando izquierdo de un operador binario.

operand2
Necesario para operadores binarios. Nombre y tipo del operando derecho de un operador binario.

operand1 y operand2 tienen la siguiente sintaxis y partes:

[ ByVal ] operandname [ As operandtype ]

Parte Descripción
ByVal Opcional, pero el mecanismo de paso debe ser ByVal.
operandname Necesario. Nombre de la variable que representa este operando. Vea Declared Element Names.
operandtype Opcional a menos Option Strict que sea On . Tipo de datos de este operando.

type
Opcional a menos Option Strict que sea On . Tipo de datos del valor que devuelve el procedimiento del operador.

statements
Opcional. Bloque de instrucciones que ejecuta el procedimiento del operador.

returnvalue
Necesario. Valor que el procedimiento del operador devuelve al código de llamada.

End Operator
Necesario. Finaliza la definición de este procedimiento de operador.

Comentarios

Solo se puede Operator usar en una clase o estructura. Esto significa que el contexto de declaración de un operador no puede ser un archivo de origen, un espacio de nombres, un módulo, una interfaz, un procedimiento o un bloque. Para obtener más información, vea Declaration Contexts and Default Access Levels (Contextos de declaración y niveles de acceso predeterminados).

Todos los operadores deben ser Public Shared . No se puede ByRef especificar , ni para ninguno de los Optional ParamArray operandos.

No puede usar el símbolo o identificador del operador para contener un valor devuelto. Debe usar la Return instrucción y debe especificar un valor. Cualquier número de Return instrucciones puede aparecer en cualquier parte del procedimiento.

La definición de un operador de esta manera se denomina sobrecarga del operador , independientemente de si se usa o no la palabra Overloads clave . En la tabla siguiente se enumeran los operadores que se pueden definir.

Tipo Operadores
Unario +, -, IsFalse, IsTrue, Not
Binary +, -, *, /, \, &, ^, >>, <<, =, <>, >, >=, <, <=, And, Like, Mod, Or, Xor
Conversión (unaria) CType

Tenga en cuenta = que el operador de la lista binaria es el operador de comparación, no el operador de asignación.

Al definir CType , debe especificar o Widening Narrowing .

Pares coincidentes

Debe definir determinados operadores como pares coincidentes. Si define cualquiera de los operadores de este par, también debe definir el otro. Los pares coincidentes son los siguientes:

  • = y <>

  • > y <

  • >= y <=

  • IsTrue y IsFalse

Restricciones de tipos de datos

Cada operador que defina debe implicar la clase o estructura en la que se define. Esto significa que la clase o estructura debe aparecer como el tipo de datos de lo siguiente:

  • Operando de un operador unario.

  • Al menos uno de los operandos de un operador binario.

  • Operando o tipo de valor devuelto de un operador de conversión.

Algunos operadores tienen restricciones de tipo de datos adicionales, como se muestra a continuación:

  • Si define los IsTrue operadores y , ambos deben devolver el tipo IsFalse Boolean .

  • Si define los << operadores y , ambos deben especificar el tipo para el de >> Integer operandtype operand2 .

El tipo de valor devuelto no tiene que corresponder al tipo de ninguno de los operandos. Por ejemplo, un operador de comparación como = o puede devolver incluso si ninguno de los <> Boolean operandos es Boolean .

Operadores lógicos y bit a bit

Los operadores , , y pueden realizar operaciones lógicas o bit a And Or bit en Not Xor Visual Basic. Sin embargo, si define uno de estos operadores en una clase o estructura, solo puede definir su operación bit a bit.

No se puede definir AndAlso el operador directamente con una instrucción Operator . Sin embargo, puede AndAlso usar si ha cumplido las condiciones siguientes:

  • Ha definido en And los mismos tipos de operando que quiere usar para AndAlso .

  • La definición And de devuelve el mismo tipo que la clase o estructura en la que la ha definido.

  • Ha definido el operador IsFalse en la clase o estructura en la que ha definido And .

De forma similar, puede usar si ha definido en los mismos operandos, con el tipo de valor devuelto de la clase o estructura, y ha definido en la clase OrElse Or o IsTrue estructura.

Widening and Narrowing Conversions

Una conversión de ampliación siempre se realiza correctamente en tiempo de ejecución, mientras que una conversión de limitación puede producir un error en tiempo de ejecución. Para obtener más información, consulta Widening and Narrowing Conversions.

Si declara que un procedimiento de conversión es Widening , el código del procedimiento no debe generar errores. Esto significa lo siguiente:

  • Siempre debe devolver un valor válido de tipo type .

  • Debe controlar todas las excepciones posibles y otras condiciones de error.

  • Debe controlar las devoluciones de errores de los procedimientos a los que llama.

Si existe la posibilidad de que un procedimiento de conversión no se haya producido correctamente o de que pueda provocar una excepción no controlada, debe declararlo como Narrowing .

Ejemplo

En el ejemplo de código siguiente se usa la instrucción para definir el esquema de una estructura que incluye procedimientos de operador para los operadores Operator And , , y Or IsFalse IsTrue . And y Or cada uno toma dos operandos de tipo y tipo de valor abc abc devuelto. IsFalse y IsTrue toman un único operando de tipo y abc devuelven Boolean . Estas definiciones permiten que el código de llamada use And , , y con AndAlso Or OrElse operandos de tipo 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

Consulta también