Procedura: definire un operatore (Visual Basic)

Se è stata definita una classe o una struttura, è possibile definire il comportamento di un operatore, quale *, <> o And, quando uno o entrambi gli operandi sono del tipo della classe o della struttura in questione.

È possibile definire l'operatore standard come routine con operatore all'interno della classe o della struttura. Tutte le routine con operatore devono essere Public Shared.

La definizione di un operatore su una classe o una struttura viene anche detta overload dell'operatore.

Esempio

Nell'esempio riportato di seguito viene definito l'operatore + per una struttura denominata height. La struttura utilizza altezze misurate in piedi e pollici. Un pollice e un piede corrispondono rispettivamente a 2,54 cm e a 12 pollici. Per garantire valori normalizzati (pollici < 12), il costruttore esegue il modulo aritmetico 12. L'operatore + utilizza il costruttore per generare valori normalizzati.

Public Shadows Structure height
    ' Need Shadows because System.Windows.Forms.Form also defines property Height.
    Private feet As Integer
    Private inches As Double
    Public Sub New(ByVal f As Integer, ByVal i As Double)
        Me.feet = f + (CInt(i) \ 12)
        Me.inches = i Mod 12.0
    End Sub
    Public Overloads Function ToString() As String
        Return Me.feet & "' " & Me.inches & """"
    End Function
    Public Shared Operator +(ByVal h1 As height, 
                             ByVal h2 As height) As height
        Return New height(h1.feet + h2.feet, h1.inches + h2.inches)
    End Operator
End Structure

È possibile testare la struttura height con il codice riportato di seguito.

Public Sub consumeHeight()
    Dim p1 As New height(3, 10)
    Dim p2 As New height(4, 8)
    Dim p3 As height = p1 + p2
    Dim s As String = p1.ToString() & " + " & p2.ToString() &
          " = " & p3.ToString() & " (= 8' 6"" ?)"
    Dim p4 As New height(2, 14)
    s &= vbCrLf & "2' 14"" = " & p4.ToString() & " (= 3' 2"" ?)"
    Dim p5 As New height(4, 24)
    s &= vbCrLf & "4' 24"" = " & p5.ToString() & " (= 6' 0"" ?)"
    MsgBox(s)
End Sub

Per ulteriori informazioni ed esempi, vedere Operator Overloading in Visual Basic 2005 (informazioni in lingua inglese).

Vedere anche

Attività

Procedura: definire un operatore di conversione (Visual Basic)

Procedura: chiamare una routine di operatore (Visual Basic)

Procedura: utilizzare una classe che definisce gli operatori (Visual Basic)

Procedura: dichiarare una struttura (Visual Basic)

Riferimenti

Istruzione Operator

Istruzione Structure

Concetti

Routine di operatore (Visual Basic)