Procedimentos do operador (Visual Basic)

Um procedimento de operador é uma série de instruções do Visual Basic que definem o comportamento de um operador padrão (como *, <>, ou And) em uma classe ou estrutura que você definiu. Isso também é chamado de sobrecarga do operador.

Quando definir procedimentos do operador

Depois de definir uma classe ou estrutura, você pode declarar variáveis como sendo do tipo dessa classe ou estrutura. Às vezes, essa variável precisa participar de uma operação como parte de uma expressão. Para fazer isso, deve ser um operando de um operador.

Visual Basic define operadores somente em seus tipos de dados fundamentais. Você pode definir o comportamento de um operador quando um ou ambos os operandos são do tipo de sua classe ou estrutura.

Para obter mais informações, consulte Declaração do operador.

Tipos de Procedimento do Operador

Um procedimento de operador pode ser um dos seguintes tipos:

  • Uma definição de um operador unário onde o argumento é do tipo de sua classe ou estrutura.

  • Uma definição de um operador binário onde pelo menos um dos argumentos é do tipo da sua classe ou estrutura.

  • Uma definição de um operador de conversão onde o argumento é do tipo da sua classe ou estrutura.

  • Uma definição de um operador de conversão que retorna o tipo de sua classe ou estrutura.

Os operadores de conversão são sempre unários, e você sempre usa CType como o operador que está definindo.

Sintaxe da declaração

A sintaxe para declarar um procedimento de operador é a seguinte:

Public Shared [Widening | Narrowing] Operator operatorsymbol ( operand1 [,  operand2 ]) As datatype

' Statements of the operator procedure.

End Operator

Você usa a Widening palavra-chave ou Narrowing somente em um operador de conversão de tipo. O símbolo do operador é sempre CType Function para um operador de conversão de tipo.

Você declara dois operandos para definir um operador binário e declara um operando para definir um operador unário, incluindo um operador de conversão de tipo. Todos os operandos devem ser declarados ByVal.

Você declara cada operando da mesma forma que declara parâmetros para Subprocedimentos.

Tipo de Dados

Como você está definindo um operador em uma classe ou estrutura que você definiu, pelo menos um dos operandos deve ser do tipo de dados dessa classe ou estrutura. Para um operador de conversão de tipo, o operando ou o tipo de retorno deve ser do tipo de dados da classe ou estrutura.

Para obter mais detalhes, consulte Declaração do operador.

Sintaxe de chamada

Você invoca um procedimento de operador implicitamente usando o símbolo de operador em uma expressão. Você fornece os operandos da mesma forma que faz para operadores predefinidos.

A sintaxe para uma chamada implícita para um procedimento de operador é a seguinte:

Dim testStruct As structurename

Dim testNewStruct As structurename = testStruct operatorsymbol 10

Ilustração da Declaração e Convocatória

A estrutura a seguir armazena um valor inteiro de 128 bits assinado como as partes constituintes de ordem alta e ordem baixa. Ele define o + operador para adicionar dois veryLong valores e gerar um valor resultante veryLong .

Public Structure veryLong
    Dim highOrder As Long
    Dim lowOrder As Long
    Public Shared Operator +(ByVal v As veryLong, 
                             ByVal w As veryLong) As veryLong
        Dim sum As New veryLong
        sum = v
        Try
            sum.lowOrder += w.lowOrder
        Catch ex As System.OverflowException
            sum.lowOrder -= (Long.MaxValue - w.lowOrder + 1)
            sum.highOrder += 1
        End Try
        sum.highOrder += w.highOrder
        Return sum
    End Operator
End Structure

O exemplo a seguir mostra uma chamada típica para o + operador definido em veryLong.

Dim v1, v2, v3 As veryLong
v1.highOrder = 1
v1.lowOrder = Long.MaxValue
v2.highOrder = 0
v2.lowOrder = 4
v3 = v1 + v2

Consulte também