Declaração Operator
Declara o símbolo do operador, operandos e código que definem um procedimento de operador em uma classe ou estrutura.
[ <attrlist> ] Public [ Overloads ] Shared [ Shadows ] [ Widening | Narrowing ]
Operator operatorsymbol ( operand1 [, operand2 ]) [ As [ <attrlist> ] type ]
[ statements ]
[ statements ]
Return returnvalue
[ statements ]
End Operator
Partes
attrlist
Opcional.Veja Lista de Atributos.Public
Obrigatório.Indica que este procedimento de operador tem Público (Visual Basic) acesso.Overloads
Opcional.SeeSobrecargas.Shared
Obrigatório.Indica que este procedimento de operador é um Compartilhamento (Visual Basic) procedimento.Shadows
Opcional.SeeSombras.Widening
Necessário para um operador de conversão, a menos que você especifique Narrowing. Indica que este procedimento de operador define um Widening conversão. Consulte "Alargamento e definindo Conversions" nesta página Ajuda.Narrowing
Necessário para um operador de conversão, a menos que você especifique Widening. Indica que este procedimento de operador define um Narrowing conversão. Consulte "Alargamento e definindo Conversions" nesta página Ajuda.operatorsymbol
Obrigatório.O símbolo ou o identificador do operador que define este procedimento de operador.operand1
Obrigatório.O nome e tipo de único operando de um operador unário (incluindo um operador de conversão) ou o operando esquerdo de um operador binário.operand2
Obrigatório para operadores binário.O nome e tipo do operando à direita de um operador binário.operand1 e operand2 ter a seguinte sintaxe e partes:
[ ByVal ] operandname [ As operandtype ]
Parte
Descrição
ByVal
Opcional, mas o mecanismo para passar argumentos deve ser ByVal.
operandname
Obrigatório.Nome da variável que representa este operando.SeeNomes de Elementos Declarados.
operandtype
Opcional, a menos que Option Strict é On. Tipo de dados deste operando.
type
Opcional, a menos que Option Strict é On. Tipo de dados do valor o procedimento de operador retorna.statements
Opcional.Bloco de instruções que o procedimento de operador é executado.returnvalue
Obrigatório.O valor que o procedimento de operador retorna para o código de chamada.EndOperator
Obrigatório.Finaliza a definição desse procedimento de operador.
Comentários
Você pode usar Operator somente em uma classe ou estrutura. Isso significa que o declaração de contexto para um operador não pode ser um arquivo de fonte, espaço para nome, módulo, interface, procedimento ou bloco.Para obter mais informações, consulte Declaração de contextos 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 operador.
Não é possível usar o símbolo do operador ou identificador para armazenar um valor retornado.Você deve usar o Return demonstrativo e ele devem especificar um valor. Qualquer número de Return instruções podem aparecer em qualquer lugar no procedimento.
Definir um operador dessa maneira é chamado sobrecarga de operador, ou não é usar o Overloads palavra-chave. A tabela a seguir lista os operadores que você pode definir.
Type (Tipo) |
Operadores |
---|---|
Unário |
+, -, IsFalse, IsTrue, Not |
Binário |
+, -, *, /, \, &, ^, >>, <<, =, <>, >, >=, <, <=, And, Like, Mod, Or, Xor |
Conversão (Unário) |
CType |
Observe que o operador = na lista binária é o operador de comparação, não o operador de atribuição.
Quando você define CType, você deve especificar Widening ou Narrowing.
Pares correspondentes
Você deve definir determinados operadores sistema autônomo pares correspondentes.Se você definir o operador de um emparelhar de tal, você deve definir o Outros também.Os pares correspondentes são:
= e <>
> e <
>= e <=
IsTrue e IsFalse
Restrições de tipo de dados
Cada operador que você definir deve envolver a classe ou estrutura em que você define.Isso significa que a classe ou estrutura deve aparecer sistema autônomo o tipo de dados das seguintes opções:
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.
Determinados operadores têm dados adicionais Digite restrições, sistema autônomo segue:
Se você definir o IsTrue e IsFalse operadores, elas devem ambos retornem o Boolean Digite.
Se você definir o << e >> operadores, eles devem especificar o Integer tipo para o operandtype de operand2.
Não tem o tipo de retorno corresponder ao tipo de qualquer operador.Por exemplo, um operador de comparação, sistema autônomo = ou <> pode retornar Boolean mesmo que haja nenhum operando Boolean.
Operadores lógicas e bit a bit
The And, Or, Not, e Xor operadores podem executar operações de lógicas ou bit a bit no Visual Basic. No entanto, se você definir um desses operadores em uma classe ou estrutura, você pode definir somente sua operação bit a bit.
Não é possível definir o AndAlso operador diretamente com um Operator demonstrativo. No entanto, você pode usar AndAlso Se tiver cumprido as seguintes condições:
Você definiu And nos mesmos tipos de operando que deseja usar para AndAlso.
Sua definição de And Retorna o mesmo tipo sistema autônomo a classe ou estrutura na qual você o define.
Você definiu o IsFalse operador de classe ou estrutura na qual você tenha definido And.
Da mesma forma, você pode usar OrElse Se você tiver definido Or em operandos mesmos, com o tipo de retorno da classe ou estrutura e você tiver definido IsTrue a classe ou estrutura.
Conversões Ampliadoras e Redutoras
A conversão de expansão sempre tem êxito no time de execução, enquanto um conversão de restrição pode falhar em time de execução.Para obter mais informações, consulte Conversões Ampliadoras e Redutoras.
Se você declarar um procedimento de conversão a ser Widening, o código do procedimento não deve gerar quaisquer falhas. Isso significa que o seguinte:
Ele sempre deve retornar um valor válido do tipo type.
Ele deve tratar todas as possíveis exceções e outras condições de erro.
Ele deve tratar qualquer retorna erro de qualquer procedimento chama.
Se houver qualquer possibilidade de um procedimento de conversão talvez não seja bem-sucedida, ou que ele pode causar uma exceção sem tratamento, você deve declarar que ele seja Narrowing.
Exemplo
O exemplo de código a seguir usa o Operator demonstrativo para definir o estrutura de tópicos de uma estrutura que inclui procedimentos de operador para o And, Or, IsFalse, e IsTrue operadores. And e Or cada têm dois operandos do tipo abc e tipo de retorno abc. IsFalse e IsTrue cada ter um único operando do tipo abc e retornar Boolean. Essas definições permitir códigos chamado usar 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
Consulte também
Tarefas
Como: Define a Conversion operador
Como: telefonar um procedimento de operador
Como: Usar uma classe que define os operadores
Conceitos
Conversões Ampliadoras e Redutoras