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