Partager via


Comment : définir un opérateur (Visual Basic)

Si vous avez défini une classe ou une structure, vous pouvez définir le comportement d’un opérateur standard (par exemple, *, <>ou And) lorsqu’un ou les deux opérandes est du type de votre classe ou structure.

Définissez l’opérateur standard en tant que procédure d’opérateur dans la classe ou la structure. Toutes les procédures d’opérateur doivent être Public Shared.

La définition d’un opérateur sur une classe ou une structure est également appelée surcharge de l’opérateur.

Exemple

L’exemple suivant définit l’opérateur + pour une structure appelée height. La structure utilise des hauteurs mesurées en pieds et pouces. Un pouce est de 2,54 centimètres, et une pied est de 12 pouces. Pour garantir les valeurs normalisées (pouces < 12,0), le constructeur effectue modulo 12 arithmétiques. L’opérateur + utilise le constructeur pour générer des valeurs normalisées.

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

Vous pouvez tester la structure height avec le code suivant.

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

Voir aussi