Udostępnij za pośrednictwem


Procedury operatorów (Visual Basic)

Procedura operatora to seria instrukcji języka Visual Basic, które definiują zachowanie operatora standardowego (takiego jak *, <>lub And) w zdefiniowanej klasie lub strukturze. Jest to również nazywane przeciążeniem operatora.

Kiedy należy zdefiniować procedury operatora

Po zdefiniowaniu klasy lub struktury można zadeklarować zmienne jako typ tej klasy lub struktury. Czasami taka zmienna musi uczestniczyć w operacji w ramach wyrażenia. Aby to zrobić, musi być operandem operatora.

Visual Basic definiuje operatory tylko na podstawowych typach danych. Można zdefiniować zachowanie operatora, gdy jeden lub oba operandy są typu klasy lub struktury.

Aby uzyskać więcej informacji, zobacz Instrukcja operatora.

Typy procedury operatora

Procedura operatora może być jednym z następujących typów:

  • Definicja operatora jednoargumentowego, w którym argument jest typem klasy lub struktury.

  • Definicja operatora binarnego, w którym co najmniej jeden z argumentów jest typem klasy lub struktury.

  • Definicja operatora konwersji, w którym argument jest typem klasy lub struktury.

  • Definicja operatora konwersji zwracającego typ klasy lub struktury.

Operatory konwersji są zawsze jednoargumentowe i zawsze są używane CType jako definiowany operator.

Składnia deklaracji

Składnia deklarowania procedury operatora jest następująca:

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

' Statements of the operator procedure.

End Operator

Używasz słowa kluczowego Widening lub Narrowing tylko dla operatora konwersji typu. Symbol operatora jest zawsze funkcją CType dla operatora konwersji typów.

Deklarujesz dwa operandy w celu zdefiniowania operatora binarnego i deklarujesz jeden operand w celu zdefiniowania operatora jednoargumentowego, w tym operatora konwersji typów. Wszystkie operandy muszą być zadeklarowane .ByVal

Każdy operand jest deklarowany w taki sam sposób, jak deklarowanie parametrów dla procedur podrzędnych.

Typ danych

Ponieważ definiujesz operator w zdefiniowanej klasie lub strukturze, co najmniej jeden z operandów musi być typu danych tej klasy lub struktury. W przypadku operatora konwersji typu operand lub zwracany typ musi być typu danych klasy lub struktury.

Aby uzyskać więcej informacji, zobacz Instrukcja operatora.

Wywoływanie składni

Procedura operatora jest wywoływana niejawnie przy użyciu symbolu operatora w wyrażeniu. Operandy są dostarczane w taki sam sposób, jak w przypadku wstępnie zdefiniowanych operatorów.

Składnia niejawnego wywołania procedury operatora jest następująca:

Dim testStruct As nazwa struktury

Dim testNewStruct As structurename = testStruct operatorsymbol 10

Ilustracja deklaracji i wywołania

Poniższa struktura przechowuje podpisaną 128-bitową wartość całkowitą jako składowe części o wysokiej kolejności i niskiej kolejności. Definiuje operator, + aby dodać dwie veryLong wartości i wygenerować wynikową veryLong wartość.

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

W poniższym przykładzie pokazano typowe wywołanie operatora zdefiniowanego + na .veryLong

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

Zobacz też