Поделиться через


Процедуры операторов (Visual Basic)

Процедура оператора — это ряд инструкций Visual Basic, определяющих поведение стандартного оператора (например *, <>или ) Andдля определенного класса или структуры. Это также называется перегрузкой оператора.

Когда следует определять процедуры операторов

При определении класса или структуры можно объявить переменные типом этого класса или структуры. Иногда такая переменная должна участвовать в операции как часть выражения. Для этого он должен быть операндом оператора.

Visual Basic определяет операторы только в основных типах данных. Можно определить поведение оператора, если один или оба операнда имеют тип класса или структуры.

Дополнительные сведения см. в инструкции оператора.

Типы процедуры оператора

Процедура оператора может быть одной из следующих типов:

  • Определение унарного оператора, в котором аргумент имеет тип класса или структуры.

  • Определение двоичного оператора, где по крайней мере один из аргументов имеет тип класса или структуры.

  • Определение оператора преобразования, в котором аргумент имеет тип класса или структуры.

  • Определение оператора преобразования, возвращающего тип класса или структуры.

Операторы преобразования всегда унарны и всегда используются CType в качестве определяемого оператора.

Синтаксис объявления

Синтаксис для объявления процедуры оператора выглядит следующим образом:

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

' Statements of the operator procedure.

End Operator

Вы используете ключевое Widening Narrowing слово только в операторе преобразования типов. Символ оператора всегда является функцией CType для оператора преобразования типов.

Вы объявляете два операнда для определения двоичного оператора, и вы объявляете один операнд для определения унарного оператора, включая оператор преобразования типов. Все операнды должны быть объявлены ByVal.

Каждый операнд объявляется так же, как вы объявляете параметры для вложенных процедур.

Тип данных

Так как вы определяете оператор для определенного класса или структуры, по крайней мере один из операндов должен иметь тип данных этого класса или структуры. Для оператора преобразования типов операнд или возвращаемый тип должен иметь тип данных класса или структуры.

Дополнительные сведения см. в инструкции оператора.

Синтаксис вызова

Процедура оператора вызывается неявно с помощью символа оператора в выражении. Операнды предоставляются так же, как и для предопределенных операторов.

Синтаксис неявного вызова процедуры оператора выглядит следующим образом:

Dim testStruct As имя структуры

Dim testNewStruct As Операторы structurenameymbol= testStruct 10

Иллюстрация объявления и вызова

Следующая структура сохраняет 128-разрядное целое число со знаком как составляющие части высокого порядка и низкого порядка. Он определяет + оператор для добавления двух veryLong значений и создания результирующего veryLong значения.

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

В следующем примере показан типичный вызов оператора, определенного + в veryLong.

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

См. также