Compartilhar via


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

Quando Definir Procedimentos do Operador

Quando você tiver definido uma classe ou estrutura, poderá declarar variáveis como 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, ela precisa ser um operando de um operador.

O Visual Basic define operadores apenas nos 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, confira a Instrução Operator.

Tipos de Procedimento de Operador

Um procedimento de operador pode ser um dos seguintes tipos:

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

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

  • Uma definição de um operador de conversão no qual o argumento é do tipo de 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

Use a palavra-chave Widening ou Narrowing somente em um operador de conversão de tipo. O símbolo do operador é sempre a Função CType 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 precisam 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 definida, pelo menos um dos operandos precisa ser do tipo de dados dessa classe ou estrutura. Para um operador de conversão de tipo, o operando ou o tipo de retorno precisam ser do tipo de dados da classe ou da estrutura.

Para obter mais detalhes, consulte a Instrução Operator.

Sintaxe de Chamada

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

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

Dim testStruct As structurename

Dim testNewStruct As structurename = testStruct operatorsymbol 10

Ilustração de Declaração e Chamada

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

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

Confira também