Delen via


Procedure: Een operator definiëren (Visual Basic)

Als u een klasse of structuur hebt gedefinieerd, kunt u het gedrag van een standaardoperator (zoals *, <>of And) definiëren wanneer een of beide operanden van het type klasse of structuur is.

Definieer de standaardoperator als operatorprocedure binnen de klasse of structuur. Alle operatorprocedures moeten zijn Public Shared.

Het definiëren van een operator in een klasse of structuur wordt ook wel overbelasting van de operator genoemd.

Opmerking

In het volgende voorbeeld wordt de operator voor een structuur met de + naam gedefinieerd height. De structuur maakt gebruik van hoogten gemeten in voeten en inches. Eén inch is 2,54 centimeter en één voet is 12 inch. Om genormaliseerde waarden (inch < 12,0) te garanderen, voert de constructor modulo 12 rekenkundige bewerkingen uit. De + operator gebruikt de constructor om genormaliseerde waarden te genereren.

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

U kunt de structuur height testen met de volgende code.

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

Zie ook