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. Consulte Lista de atributos.
Public
Necesario. Indica que este procedimiento de operador tiene acceso público.
Overloads
Opcional. Consulte Overloads.
Shared
Necesario. Indica que este procedimiento de operador es un procedimiento compartido.
Shadows
Opcional. Consulte Shadows.
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 "Conversiones de ampliación y conversiones de restricció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 restricción. Consulte "Conversiones de ampliación y conversiones de restricción" en esta página de ayuda.
operatorsymbol
Necesario. Símbolo o identificador del operador que este procedimiento de operador define.
operand1
Necesario. 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
Obligatorio para operadores binarios. Nombre y tipo del operando derecho de un operador binario.
operand1
y operand2
tienen la sintaxis y partes siguientes:
[ 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 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 el procedimiento de operador devuelve.
statements
Opcional. Bloque de instrucciones que el procedimiento de operador ejecuta.
returnvalue
Necesario. Valor que el procedimiento de operador devuelve al código de llamada.
End
Operator
Necesario. Finaliza la definición de este procedimiento de operador.
Comentarios
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 código fuente, un espacio de nombres, un módulo, una interfaz, un procedimiento ni 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 puede especificar ByRef
, Optional
ni ParamArray
para ninguno de los operandos.
No puede usar el identificador ni el símbolo del operador para contener un valor devuelto. Debe usar la instrucción Return
, la que debe especificar un valor. Cualquier número de instrucciones Return
puede aparecer en cualquier parte del procedimiento.
Definir un operador de este modo se denomina sobrecarga de operador, independientemente de si se usa o no la palabra clave Overloads
. 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 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 tipo de par, también debe definir el otro. Los pares coincidentes son los siguientes:
=
y<>
>
y<
>=
y<=
IsTrue
yIsFalse
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:
El operando de un operador unario.
Al menos uno de los operandos de un operador binario.
El operando o el 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 operadores
IsTrue
yIsFalse
, ambos deben devolver el tipoBoolean
.Si define los operadores
<<
y>>
, ambos deben especificar el tipoInteger
paraoperandtype
deoperand2
.
No es necesario que el tipo de valor devuelto corresponda 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 operadores And
, Or
, Not
y 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 puede definir el operador AndAlso
directamente con una instrucción Operator
. Sin embargo, puede usar AndAlso
si ha cumplido estas condiciones:
Definió
And
en los mismos tipos de operando que desea usar paraAndAlso
.La definición de
And
devuelve el mismo tipo que la clase o estructura en la que se definió.Definió el operador
IsFalse
en la clase o estructura en la que definióAnd
.
Del mismo modo, puede usar OrElse
si definió Or
en los mismos operandos, con el tipo de valor devuelto de la clase o estructura, y definió IsTrue
en la clase o 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 restricción puede generar 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 como 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 declararlo como Narrowing
.
Ejemplo
En el ejemplo de código siguiente, se usa la instrucción Operator
para definir el esquema de una estructura que incluye procedimientos de operador para los operadores And
, Or
, IsFalse
y IsTrue
. And
y Or
toman cada uno dos operandos de tipo abc
y devuelven el tipo abc
. IsFalse
y IsTrue
toman cada uno un operando único de tipo abc
y devuelven Boolean
. Estas definiciones permiten que el código de llamada utilice And
, AndAlso
, Or
y 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
- IsFalse (operador)
- IsTrue (operador)
- Widening
- Narrowing
- Widening and Narrowing Conversions
- Procedimientos de operador
- Procedimiento para definir un operador
- Procedimiento para definir un operador de conversión
- Procedimiento para llamar a un procedimiento de operador
- Procedimiento para usar una clase que define operadores