Instruçã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.Consulte Sobrecargas (Visual Basic).

  • Shared
    Obrigatório.Indica que este procedimento de operador é um Compartilhado (Visual Basic) procedimento.

  • Shadows
    Opcional.Consulte Sombras (Visual Basic).

  • Widening
    Necessário para um operador de conversão, a menos que você especifique Narrowing.Indica que este procedimento de operador define uma Alargamento (Visual Basic) conversão.Consulte "Widening e restringir conversões" 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 uma Restrição (Visual Basic) conversão.Consulte "Widening e restringir conversões" nesta página Ajuda.

  • operatorsymbol
    Obrigatório.O símbolo ou o identificador do operador que este procedimento de operador define.

  • operand1
    Obrigatório.O nome e o tipo de operando esquerdo de um operador binário ou de único operando de um operador unário (incluindo um operador de conversão).

  • operand2
    Obrigatório para operadores binários.O nome e o tipo do operando à direita de um operador binário.

    operand1e operand2 que a sintaxe e partes a seguir:

    [ ByVal ] operandname [ As operandtype ]

    Parte

    Descrição

    ByVal

    É opcional, mas o mecanismo de passagem deve ser ByVal (Visual Basic).

    operandname

    Obrigatório.Nome da variável que representa esse operando.Consulte Nomes de elementos declarados (Visual Basic).

    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 deste procedimento de operador.

Comentários

Você pode usar Operator somente em uma classe ou estrutura.Isso significa que o o contexto de declaração para um operador não pode ser um arquivo de origem, espaço para nome, módulo, interface, procedimento ou bloco.Para obter mais informações, consulte Níveis de acesso padrão (Visual Basic) e os contextos de declaração.

Todos os operadores devem ser Public Shared.Não é possível especificar ByRef, Optional, ou ParamArray para qualquer operador.

Você não pode usar o símbolo do operador ou o identificador para armazenar um valor de retorno.Você deve usar o Return instrução e ele devem especificar um valor.Qualquer número de Return declarações podem aparecer em qualquer lugar no procedimento.

A definição de um operador dessa maneira é chamado de a sobrecarga de operador, quer você use ou não o Overloads palavra-chave.A tabela a seguir lista os operadores que você pode definir.

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 um Widening ou Narrowing.

Pares correspondentes

Você deve definir determinados operadores como pares correspondentes.Se você definir um operador de tal um par, você deve definir o outro também.Os pares correspondentes são os seguintes:

  • = e <>

  • > e <

  • >= e <=

  • IsTrue e IsFalse

Restrições de tipo de dados

Cada operador que você define deve envolver a classe ou estrutura na qual você defini-la.Isso significa que a classe ou estrutura deve aparecer como 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, como segue:

  • Se você definir a IsTrue e IsFalse operadores, eles devem ambos retornar o Boolean tipo.

  • Se você definir a << e >> operadores, eles devem especificar o Integer tipo para o operandtype de operand2.

O tipo de retorno não precisam corresponder ao tipo de qualquer operador.Por exemplo, um operador de comparação, como = ou <> pode retornar Boolean , mesmo se nenhum operando for Boolean.

Operadores bit a bit e lógicas

O And, Or, Not, e Xor operadores podem executar operações de lógicas ou bit a bit em 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 instrução.Entretanto, você pode usar AndAlso se você tiver cumprido as seguintes condições:

  • Você definiu And nos mesmos tipos de operando que você deseja usar para AndAlso.

  • Sua definição de And retorna o mesmo tipo que a classe ou estrutura na qual você o define.

  • Você definiu a IsFalse o operador na classe ou estrutura na qual você definiu And.

Da mesma forma, você pode usar OrElse se você tiver definido Or na mesmos operandos, com o tipo de retorno da classe ou estrutura e você tiver definido IsTrue na classe ou estrutura.

Conversões Ampliadoras e Redutoras

A widening conversão sempre é bem-sucedida em tempo de execução, enquanto um Estreitando conversão pode falhar em tempo de execução.Para obter mais informações, consulte Ampliação e restrição de conversões (Visual Basic).

Se você declarar um procedimento de conversão para ser Widening, seu código de procedimento não deve gerar quaisquer falhas.Isso significa 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 que um procedimento de conversão talvez não seja bem-sucedida, ou que ele pode causar uma exceção não tratada, você deve declarar que ele seja Narrowing.

Exemplo

O seguinte exemplo de código usa a Operator a instrução para definir o contorno de uma estrutura que inclui procedimentos de operador para o And, Or, IsFalse, e IsTrue operadores.Ande Or cada levar dois operandos do tipo abc e tipo de retorno abc.IsFalsee IsTrue cada ter um único operando do tipo abc e retornar Boolean.Essas definições permitem que o código de chamada 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: definir um operador (Visual Basic)

Como: definir um operador de conversão (Visual Basic)

Como: chamar um procedimento de operador (Visual Basic)

Como: usar uma classe que define os operadores (Visual Basic)

Referência

Operador IsFalse (Visual Basic)

Operador IsTrue (Visual Basic)

Alargamento (Visual Basic)

Restrição (Visual Basic)

Conceitos

Ampliação e restrição de conversões (Visual Basic)

Procedimentos de operador (Visual Basic)