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