Routine di operatore (Visual Basic)

Una routine dell'operatore è una serie di istruzioni Visual Basic che definiscono il comportamento di un operatore standard (ad esempio , o ) in una classe o struttura * <> definita And dall'utente. Questa operazione è detta anche overload dell'operatore.

Quando definire routine dell'operatore

Dopo aver definito una classe o una struttura, è possibile dichiarare le variabili come del tipo di tale classe o struttura. A volte 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 sui relativi 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 operatore

Una routine dell'operatore può essere di 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 uniri e si usa CType sempre come operatore che si sta definendo.

Sintassi di dichiarazione

La sintassi per dichiarare una routine dell'operatore è la seguente:

Public Shared [Widening | Narrowing] Operator operatorsymbol ( operand1 [,  operand2 ]) As datatype

' Statements of the operator procedure.

End Operator

La parola chiave Widening o viene utilizzata solo in un Narrowing operatore di conversione del tipo. Il simbolo dell'operatore è sempre CType Function per un operatore di conversione del tipo.

Si dichiarano due operandi per definire un operatore binario e si dichiara un operando per definire un operatore unario, incluso un operatore di conversione del tipo. Tutti gli operandi devono essere dichiarati ByVal .

Ogni operando viene dichiarato nello stesso modo in cui si dichiarano i parametri per sub procedures.

Tipo di dati

Poiché si definisce un operatore in una classe o struttura definita, almeno uno degli operandi deve essere del tipo di dati di tale classe o struttura. Per un operatore di conversione del tipo, l'operando o il tipo restituito deve essere del tipo di dati della classe o della struttura.

Per altri dettagli, vedere Istruzione Operator.

Sintassi di chiamata

È possibile richiamare una routine dell'operatore in modo implicito usando il simbolo dell'operatore in un'espressione. Gli operandi vengono forniti come per gli operatori predefiniti.

La sintassi per una chiamata implicita a una routine dell'operatore è la seguente:

Dim testStruct As nome struttura

Dim testNewStruct As nome struttura = testStruct operatorsymbol 10

Illustrazione della dichiarazione e della chiamata

La struttura seguente archivia un intero con segno a 128 bit come parti costituenti di ordine elevato e di ordine basso. Definisce + l'operatore per aggiungere due veryLong valori 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