Routine di operatore (Visual Basic)
Una routine di operatore è una serie di istruzioni di Visual Basic che definiscono il comportamento di un operatore standard, ad esempio *
, <>
o And
, in una classe o struttura definita. Viene anche chiamata overload degli operatori.
Quando definire le routine di operatore
Dopo aver definito una classe o una struttura, è possibile dichiarare le variabili come del tipo di tale classe o struttura. In alcuni casi una variabile di questo tipo deve partecipare a un'operazione come parte di un'espressione. A tale scopo, deve essere un operando di un operatore.
Visual Basic definisce gli operatori solo per i tipi di dati fondamentali. È possibile definire il comportamento di un operatore quando uno o entrambi gli operandi sono del tipo della classe o della struttura.
Per altre informazioni, vedere Istruzione Operator.
Tipi di routine di operatore
Una routine di operatore può essere uno dei tipi seguenti:
Definizione di un operatore unario in cui l'argomento è del tipo della classe o della struttura.
Definizione di un operatore binario in cui almeno uno degli argomenti è del tipo della classe o della struttura.
Definizione di un operatore di conversione in cui l'argomento è del tipo della classe o della struttura.
Definizione di un operatore di conversione che restituisce il tipo della classe o della struttura.
Gli operatori di conversione sono sempre unari e si usa sempre CType
come operatore definito.
Sintassi di dichiarazione
La sintassi per dichiarare una routine di operatore è la seguente:
Public Shared [Widening | Narrowing] Operator operatorsymbol ( operand1 [, operand2 ]) As datatype
' Statements of the operator procedure.
End Operator
Usare la parola chiave Widening
o Narrowing
solo su un operatore di conversione dei tipi. Il simbolo dell'operatore è sempre la funzione CType per un operatore di conversione dei tipi.
Si dichiarano due operandi per definire un operatore binario e si dichiara un operando per definire un operatore unario, incluso un operatore di conversione dei tipi. Tutti gli operandi devono essere dichiarati con il meccanismo ByVal
.
Ogni operando viene dichiarato nello stesso modo in cui si dichiarano i parametri per le routine Sub.
Tipo di dati
Poiché si definisce un operatore su una classe o una struttura definita, almeno uno degli operandi deve essere del tipo di dati di tale classe o struttura. Per un operatore di conversione dei tipi, l'operando o il tipo restituito deve essere del tipo di dati della classe o della struttura.
Per altre informazioni, vedere Istruzione Operator.
Sintassi di chiamata
Per richiamare una routine di operatore in modo implicito, usare il simbolo dell'operatore in un'espressione. Per specificare gli operandi, procedere come con gli operatori predefiniti.
La sintassi per una chiamata implicita a una routine di operatore è la seguente:
Dim testStruct As
structurename
Dim testNewStruct As
structurename = testStruct
operatorsymbol 10
Illustrazione della dichiarazione e della chiamata
Nella struttura seguente è archiviato un valore intero a 128 bit con segno come parti costituenti di ordine elevato e di ordine basso. Definisce l'operatore +
per aggiungere due valori veryLong
e generare un valore veryLong
risultante.
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
Nell'esempio seguente viene illustrata una chiamata tipica all'operatore +
definito in veryLong
.
Dim v1, v2, v3 As veryLong
v1.highOrder = 1
v1.lowOrder = Long.MaxValue
v2.highOrder = 0
v2.lowOrder = 4
v3 = v1 + v2