Operator (Instrucción)
Actualización: noviembre 2007
Declara el símbolo de operador, los operandos y el código que definen un procedimiento de operador en una clase o estructura.
[ <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 la Lista de atributos.Public
Obligatorio. Indica que este procedimiento de operador tiene acceso de tipo Public (Visual Basic).Overloads
Opcional. Vea Overloads.Shared
Obligatorio. Indica que este procedimiento de operador es de tipo Shared (Visual Basic).Shadows
Opcional. Vea Shadows.Widening
Se requiere para un operador de conversión a menos que especifique Narrowing. Indica que este procedimiento de operador define una conversión de tipo Widening. Vea "Conversiones de ampliación y restricción" en esta página de Ayuda.Narrowing
Se requiere para un operador de conversión a menos que especifique Widening. Indica que este procedimiento de operador define una conversión de tipo Narrowing. Vea "Conversiones de ampliación y restricción" en esta página de Ayuda.operatorsymbol
Obligatorio. El símbolo o identificador del operador que define este procedimiento de operador.operand1
Obligatorio. El 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 los operadores binarios. El nombre y tipo del operando derecho de un operador binario.operand1 y operand2 tienen la sintaxis y las partes siguientes:
[ ByVal ] operandname [ As operandtype ]
Parte
Descripción
ByVal
Opcional, pero el mecanismo para pasar argumentos 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 esté establecido en On. Tipo de datos de este operando.
type
Opcional a menos que Option Strict esté establecido en On. Tipos de datos del valor que devuelve el procedimiento de operador.statements
Opcional. Bloquee de instrucciones que ejecuta el procedimiento de operador.returnvalue
Obligatorio. El valor que el procedimiento de operador devuelve al código de llamada.EndOperator
Obligatorio. Termina la definición de este procedimiento de operador.
Comentarios
Sólo puede utilizar Operator en una clase o una estructura. Esto significa que el contexto de declaración de un operador no puede ser un archivo de código fuente, espacio de nombres, módulo, interfaz, procedimiento o bloque. Para obtener más información, vea Contextos de declaración y niveles de acceso predeterminados.
Todos los operadores deben ser de tipo Public Shared. No puede especificar ByRef, Optional o ParamArray en ningún operando.
No puede utilizar el símbolo o identificador de operador para incluir un valor devuelto. Debe utilizar la instrucción Return y debe especificar un valor. Puede aparecer cualquier número de instrucciones Return en cualquier lugar de un procedimiento.
La definición de un operador de esta manera se denomina sobrecarga de operadores, independientemente de si utiliza la palabra clave Overloads. En la siguiente tabla se muestran los operadores que se pueden definir.
Tipo |
Operadores |
---|---|
Unario |
+, -, IsFalse, IsTrue, Not |
Binary |
+, -, *, /, \, &, ^, >>, <<, =, <>, >, >=, <, <=, And, Like, Mod, Or, Xor |
Conversión (unario) |
CType |
Observe que el operador = en la lista binaria es el operador de comparación, no el operador de asignación.
Cuando define CType, debe especificar Widening o Narrowing.
Pares correspondientes
Debe definir ciertos operadores como pares correspondientes. Si define un operador de este tipo, también debe definir el otro. Los pares correspondientes son los siguientes:
= y <>
> y <
>= y <=
IsTrue y IsFalse
Restricciones de tipos de datos
Cada operador que define debe implicar la clase o estructura donde lo define. Esto significa que la clase o estructura debe aparecer como tipo de datos de los elementos siguientes:
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.
Ciertos operadores tienen restricciones adicionales de tipo de datos, como las siguientes:
Si define los operadores IsTrue y IsFalse, ambos deben devolver el tipo Boolean.
Si define los operadores << y >>, ambos deben especificar el tipo Integer en operandtype y operand2.
El tipo de valor devuelto no tiene que corresponder con el tipo de un operando. Por ejemplo, un operador de comparación como = o <> puede devolver un valor de tipo Boolean aunque ninguno de los operandos sea de tipo Boolean.
Operadores lógicos y bit a bit
Los operadores And, Or, Not y Xor pueden realizar operaciones bit a bit o lógicas en Visual Basic. Sin embargo, si define uno de estos operadores en una clase o estructura, sólo puede definir su operación bit a bit.
No puede definir directamente el operador AndAlso con una instrucción Operator. Sin embargo, puede utilizar AndAlso si ha cumplido las condiciones siguientes:
Ha definido And en los mismos tipos de operando que desea utilizar para AndAlso.
Su definición de And devuelve el mismo tipo que la clase o estructura donde lo ha definido.
Ha definido el operador IsFalse en la clase o estructura donde ha definido And.
De la misma forma, puede utilizar 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 de restricción
Una conversión de ampliación siempre es correcta 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, vea Conversiones de ampliación y de restricción.
Si declara un procedimiento de conversión de tipo Widening, su código de procedimiento no debe generar ningún error. 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 retorno del error de cualquier procedimiento al que llama.
Si existe alguna posibilidad de que un procedimiento de conversión genere un error o una excepción no controlada, debe declararlo de tipo Narrowing.
Ejemplo
En el ejemplo de código siguiente se utiliza la instrucción Operator para definir el esquema de una estructura que incluye procedimientos de operador para los operadores And, Or, IsFalse e IsTrue. And y Or utilizan dos operandos de tipo abc y devuelven un valor de tipo abc. IsFalse e IsTrue utilizan un único operando de tipo abc y devuelven un valor de tipo Boolean. Estas definiciones permiten al código de llamada utilizar 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
Vea también
Tareas
Cómo: Definir un operador de conversión
Cómo: Llamar a un procedimiento de operador
Cómo: Utilizar una clase que define operadores
Conceptos
Conversiones de ampliación y de restricción