Instrução Operator

Declara osímbolodo operador, operandos e código que definem umprocedimento de operadorem 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

Parts

  • attrlist
    Optional. See Attribute List.

  • Public
    Required. Indica que esteprocedimento de operadortem Público (Visual Basic) de acesso.

  • Overloads
    Optional. See Sobrecargas (Visual Basic).

  • Shared
    Required. Indica que esteprocedimento de operadoré um Compartilhamento (Visual Basic)procedimento.

  • Shadows
    Optional. See Shadows (Visual Basic).

  • Widening
    Necessário para um operador de conversão, a menos que você especificar Narrowing. Indica que esteprocedimento de operadordefine uma Expansão (Visual Basic) conversão. Consulte "Widening e estreitando conversões" nesta página de Ajuda .

  • Narrowing
    Necessário para um operador de conversão, a menos que você especificar Widening. Indica que esteprocedimento de operadordefine uma Restrição (Visual Basic) conversão. Consulte "Widening e estreitando conversões" nesta página de Ajuda .

  • operatorsymbol
    Required. O símbolo ou o identificador do operador que esteprocedimento de operadordefine.

  • operand1
    Required. O nome e o tipo de operando esquerdo dooperador binárioou de único operando de um operador de unário (incluindo um operadorde conversão).

  • operand2
    Necessário para operadores binário . O nome e o tipo do operando à direita dooperador binário.

    operand1e operand2 que a sintaxe e partes a seguir:

    [ ByVal ] operandname [ As operandtype ]

    Part

    Description

    ByVal

    Opcional, mas o mecanismo para passar argumentos devem ser ByVal (Visual Basic).

    operandname

    Required. ONome da variável que representa esse operando. See 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 oprocedimento de operadorretorna.

  • statements
    Optional. Bloco de instruções que oprocedimento de operadoré executado.

  • returnvalue
    Required. O valor que oprocedimento de operadorretorna para o código de chamada.

  • EndOperator
    Required. Finaliza a definição desteprocedimentode operador.

Comentários

Você pode usar Operator somente em uma classe ou estrutura. Isso significa que o dedeclaraçãocontexto para um operador não pode ser um arquivo de fonte , namespace, módulo, interface, procedimentoou bloco. For more information, see Contextos de declaração e níveis de acesso padrão (Visual Basic).

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

É possível usar osímbolo do operadorou o identificador para armazenar um valor retornado. Você deve usar o Returndedemonstrativoe 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 deoperador, quer você use ou não o Overloadspalavra-chave. The following table lists the operators you can define.

Type

Operators

Unary

+, -, IsFalse, IsTrue, Not

Binary

+, -, *, /, \, &, ^, >>, <<, =, <>, >, >=, <, <=, And, Like, Mod, Or, Xor

Conversion (unary)

CType

Note that the = operator in the binary list is the comparison operator, not the assignment operator.

Quando você define CType, você deve especificar 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:

  • = and <>

  • > and <

  • >= and <=

  • IsTrue and 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 como o tipo de dados o seguinte:

  • O operando do operadorunário.

  • Pelo menos um dos operandos dooperador binário.

  • O operando ou o tipo de retorno de um operadorde conversão.

Determinados operadores têm restrições adicionais de tipo de dados , da seguinte maneira:

  • 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 precisa corresponder ao tipo de qualquer operador. Por exemplo, uma comparação operador 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 AndAlsoooperador diretamente com um Operatordemonstrativo. No entanto, 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ê definiu o proprietário.

  • Você definiu o IsFalseooperador na classe ou estrutura na qual você definiu And.

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

Widening and Narrowing Conversions

A widening conversão sempre é bem-sucedida em tempo de execução, enquanto um Estreitando conversão pode falhar em tempo de execução. For more information, see Conversões de expansão e restrição (Visual Basic).

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

Exemplo

O seguinte exemplo de código usa a Operatordedemonstrativo para definir o estrutura de tópicos 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 operadores (Visual Basic)

Referência

Operador IsFalse (Visual Basic)

Operador IsTrue (Visual Basic)

Expansão (Visual Basic)

Restrição (Visual Basic)

Conceitos

Conversões de expansão e restrição (Visual Basic)

Procedimentos de operador (Visual Basic)