Compartir a través de


Operator (instrucción)

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. Consulte Lista de atributos.

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

Overloads
Opcional. Consulte Sobrecargas.

Shared
Obligatorio. Indica que este procedimiento de operador es un procedimiento Compartido .

Shadows
Opcional. Vea Sombras.

Widening
Necesario para un operador de conversión a menos que especifique Narrowing. Indica que este procedimiento de operador define una conversión de ampliación . Vea "Conversiones de ampliación y restricción" en esta página de Ayuda.

Narrowing
Necesario para un operador de conversión a menos que especifique Widening. Indica que este procedimiento de operador define una conversión de restricción . Vea "Conversiones de ampliación y restricción" en esta página de Ayuda.

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

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

operand2
Necesario para los 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 Obligatorio. Nombre de la variable que representa este operando. Vea Nombres de elementos declarados.
operandtype Opcional a menos que Option Strict sea On. Tipo de datos de este operando.

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

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

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

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

Observaciones

Solo puede usar Operator 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 Contextos de declaración y Niveles de acceso predeterminados.

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

No se 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 de operadores, independientemente de si se usa o no la Overloads palabra clave . En la tabla siguiente se enumeran los operadores que puede definir.

Tipo Operadores
Unario +, -, IsFalse, , IsTrue, Not
Binario +, -, *, /, , &\, ^, >><<=<>>>=<<=AndLikeModOrXor
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 Widening o 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 indica a continuación:

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

  • Si define los << operadores y >> , deben especificar el Integer tipo para el operandtype de 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 Boolean incluso si ninguno de los operandos es Boolean.

Operadores lógicos y bit a bit

Los Andoperadores , Or, Noty Xor pueden realizar operaciones lógicas o bit a bit en 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 el AndAlso operador directamente con una Operator instrucción . Sin embargo, puede usar AndAlso si ha cumplido las condiciones siguientes:

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

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

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

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

Conversiones de ampliación y restricción

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. Para obtener más información, consulta Widening and Narrowing Conversions.

Si declara un procedimiento de conversión para que sea 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 cualquier devolución de error de los procedimientos a los que llama.

Si existe alguna posibilidad de que un procedimiento de conversión no se realice correctamente o que pueda provocar una excepción no controlada, debe declarar que es Narrowing.

Ejemplo

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

Consulte también