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 Asnomestruttura

Dim testNewStruct Asnomestruttura= testStructsimbolooperatore10

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

Vedi anche