Declaração do operador
Declara o símbolo do operador, operandos e código que definem um procedimento de operador em uma classe ou estrutura.
Sintaxe
[ <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
Obrigatório. Indica que este procedimento do operador tem acesso público .
Overloads
Opcional. Consulte Sobrecargas.
Shared
Obrigatório. Indica que este procedimento de operador é um procedimento compartilhado .
Shadows
Opcional. Veja Sombras.
Widening
Necessário para um operador de conversão, a menos que você especifique Narrowing
. Indica que esse procedimento de operador define uma conversão de Ampliação . Consulte "Ampliando e restringindo conversões" nesta página de Ajuda.
Narrowing
Necessário para um operador de conversão, a menos que você especifique Widening
. Indica que esse procedimento de operador define uma conversão de estreitamento . Consulte "Ampliando e restringindo conversões" nesta página de Ajuda.
operatorsymbol
Obrigatório. O símbolo ou identificador do operador que este procedimento do operador define.
operand1
Obrigatório. O nome e o tipo do operando único de um operador unário (incluindo um operador de conversão) ou o operando esquerdo de um operador binário.
operand2
Necessário para operadores binários. O nome e o tipo do operando direito de um operador binário.
operand1
e operand2
têm a seguinte sintaxe e partes:
[ ByVal ] operandname [ As operandtype ]
Parte | Description |
---|---|
ByVal |
Opcional, mas o mecanismo de passagem deve ser ByVal. |
operandname |
Obrigatório. Nome da variável que representa este operando. Consulte Nomes de elementos declarados. |
operandtype |
Opcional, a menos que Option Strict seja On . Tipo de dados deste operando. |
type
Opcional, a menos que Option Strict
seja On
. Tipo de dados do valor retornado pelo procedimento do operador.
statements
Opcional. Bloco de instruções que o procedimento do operador executa.
returnvalue
Obrigatório. O valor que o procedimento do operador retorna ao código de chamada.
End
Operator
Obrigatório. Encerra a definição deste procedimento de operador.
Observações
Você só pode usar Operator
em uma classe ou estrutura. Isso significa que o contexto da declaração para um operador não pode ser um arquivo de origem, namespace, módulo, interface, procedimento ou bloco. Para obter mais informações, consulte Contextos de declaração e níveis de acesso padrão.
Todos os operadores devem ser Public Shared
. Não é possível especificar ByRef
, Optional
ou ParamArray
para qualquer um dos operandos.
Não é possível usar o símbolo ou identificador do operador para manter um valor de retorno. Você deve usar a Return
instrução e ela deve especificar um valor. Qualquer número de Return
declarações pode aparecer em qualquer lugar do procedimento.
Definir um operador dessa maneira é chamado de sobrecarga do operador, quer você use ou não a Overloads
palavra-chave. A tabela a seguir lista os operadores que você pode definir.
Type | Operadores |
---|---|
Unário | + , - , IsFalse , IsTrue , Not |
Binário | + , , , , , & And ^ Mod >= Like = <> > <= Or >> < \ << / * - Xor |
Conversão (unária) | CType |
Observe que o =
operador na lista binária é o operador de comparação, não o operador de atribuição.
Ao definir CType
, você deve especificar ou Widening
Narrowing
.
Pares Combinados
Você deve definir determinados operadores como pares correspondentes. Se você definir um operador de tal par, você deve definir o outro também. Os pares correspondentes são os seguintes:
=
e<>
>
e<
>=
e<=
IsTrue
eIsFalse
Restrições de tipo de dados
Cada operador que você define deve envolver a classe ou estrutura na qual você o define. Isso significa que a classe ou estrutura deve aparecer como o tipo de dados do seguinte:
O operando de um operador unário.
Pelo menos um dos operandos de um operador binário.
O operando ou o tipo de retorno de um operador de conversão.
Alguns operadores têm restrições adicionais de tipo de dados, como se segue:
Se você definir os
IsTrue
operadores eIsFalse
, ambos deverão retornar oBoolean
tipo.Se você definir os
<<
operadores e>>
, ambos deverão especificar oInteger
tipo para ooperandtype
deoperand2
.
O tipo de retorno não precisa corresponder ao tipo de qualquer operando. Por exemplo, um operador de comparação como =
ou <>
pode retornar Boolean
mesmo se nenhum operando for Boolean
.
Operadores lógicos e bitwise
Os And
operadores , Or
, Not
e Xor
podem executar operações lógicas ou bit a bit no Visual Basic. No entanto, se você definir um desses operadores em uma classe ou estrutura, poderá definir apenas sua operação bitwise.
Não é possível definir o AndAlso
operador diretamente com uma Operator
instrução. No entanto, pode utilizar AndAlso
se tiver cumprido as seguintes condições:
Você definiu
And
os mesmos tipos de operando que deseja usar paraAndAlso
o .Sua definição de
And
retorna o mesmo tipo que a classe ou estrutura na qual você a definiu.Você definiu o
IsFalse
operador na classe ou estrutura na qual você definiuAnd
.
Da mesma forma, você pode usar OrElse
se tiver definido Or
nos mesmos operandos, com o tipo de retorno da classe ou estrutura, e tiver definido IsTrue
na classe ou estrutura.
Ampliando e estreitando conversões
Uma conversão de ampliação sempre é bem-sucedida em tempo de execução, enquanto uma conversão de estreitamento pode falhar em tempo de execução. Para obter mais informações, consulte Ampliando e restringindo conversões.
Se você declarar um procedimento de conversão como , Widening
seu código de procedimento não deverá gerar falhas. Significado:
Ele deve sempre retornar um valor válido do tipo
type
.Ele deve lidar com todas as exceções possíveis e outras condições de erro.
Ele deve lidar com quaisquer retornos de erro de quaisquer procedimentos que ele chama.
Se houver alguma possibilidade de que um procedimento de conversão não seja bem-sucedido ou que possa causar uma exceção não tratada, você deve declará-lo como Narrowing
.
Exemplo
O exemplo de código a seguir usa a Operator
instrução para definir a estrutura de tópicos de uma estrutura que inclui procedimentos de operador para os And
operadores , Or
, IsFalse
, e IsTrue
. And
e Or
cada um toma dois operandos do tipo abc
e tipo abc
de retorno. IsFalse
e IsTrue
cada um pega um único operando do tipo abc
e retorna.Boolean
Essas definições permitem que o código de chamada use And
, AndAlso
, Or
, e OrElse
com operandos do 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