Delen via


Operatorprocedures (Visual Basic)

Een operatorprocedure is een reeks Visual Basic-instructies waarmee het gedrag van een standaardoperator (zoals *, <>of And) wordt gedefinieerd voor een klasse of structuur die u hebt gedefinieerd. Dit wordt ook wel overbelasting van operatoren genoemd.

Wanneer operatorprocedures definiëren

Wanneer u een klasse of structuur hebt gedefinieerd, kunt u variabelen declareren als van het type van die klasse of structuur. Soms moet een dergelijke variabele deelnemen aan een bewerking als onderdeel van een expressie. Hiervoor moet het een operand van een operator zijn.

Visual Basic definieert alleen operators voor de fundamentele gegevenstypen. U kunt het gedrag van een operator definiëren wanneer een of beide operanden van het type klasse of structuur zijn.

Zie Operator-instructie voor meer informatie.

Typen operatorprocedure

Een operatorprocedure kan een van de volgende typen zijn:

  • Een definitie van een unaire operator waarbij het argument van het type klasse of structuur is.

  • Een definitie van een binaire operator waarbij ten minste één van de argumenten van het type klasse of structuur is.

  • Een definitie van een conversieoperator waarbij het argument van het type klasse of structuur is.

  • Een definitie van een conversieoperator die het type klasse of structuur retourneert.

Conversieoperators zijn altijd unaire en u gebruikt CType altijd als de operator die u definieert.

Syntaxis van declaratie

De syntaxis voor het declareren van een operatorprocedure is als volgt:

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

' Statements of the operator procedure.

End Operator

U gebruikt het Widening of Narrowing trefwoord alleen voor een typeconversieoperator. Het operatorsymbool is altijd CType-functie voor een typeconversieoperator.

U declareert twee operanden om een binaire operator te definiëren en u declareert één operand om een unaire operator te definiëren, inclusief een operator voor typeconversie. Alle operanden moeten worden gedeclareerd ByVal.

U declareert elke operand op dezelfde manier als u parameters declareert voor Subprocedures.

Gegevenstype

Omdat u een operator definieert voor een klasse of structuur die u hebt gedefinieerd, moet ten minste één van de operanden van het gegevenstype van die klasse of structuur zijn. Voor een operator voor typeconversie moet de operand of het retourtype van het gegevenstype van de klasse of structuur zijn.

Zie Operator-instructie voor meer informatie.

Aanroepende syntaxis

U roept impliciet een operatorprocedure aan met behulp van het operatorsymbool in een expressie. U levert de operanden op dezelfde manier als voor vooraf gedefinieerde operators.

De syntaxis voor een impliciete aanroep van een operatorprocedure is als volgt:

Dim testStruct Asstructuurnaam

Dim testNewStruct Asstructuurnaam= testStructoperatorsymbol10

Afbeelding van declaratie en oproep

In de volgende structuur wordt een ondertekende 128-bits geheel getalwaarde opgeslagen als de samenstellende onderdelen van hoge volgorde en lage volgorde. Hiermee definieert u de + operator om twee veryLong waarden toe te voegen en een resulterende waarde te veryLong genereren.

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

In het volgende voorbeeld ziet u een typische aanroep van de + operator die is gedefinieerd op veryLong.

Dim v1, v2, v3 As veryLong
v1.highOrder = 1
v1.lowOrder = Long.MaxValue
v2.highOrder = 0
v2.lowOrder = 4
v3 = v1 + v2

Zie ook