Процедуры операторов
Обновлен: Ноябрь 2007
Процедура оператора — это последовательность операторов Visual Basic, определяющих поведение стандартного оператора (такого как *, <> или And) в классе или структуре, определенных вами. Это также называется перегрузкой оператора.
Когда определять процедуры оператора:
После определения класса или структуры, можно объявлять переменные типа этого класса или структуры. Иногда такая переменная должна участвовать в операции как часть выражения. Чтобы сделать это, она должна быть операндом оператора.
Visual Basic определяет операторы только на его основных типах данных. Можно определить поведение оператора, если один или оба операнда имеют тип класса или структуры.
Дополнительные сведения см. в разделе Оператор Operator.
Типы процедур оператора
Процедура оператора может быть одним из следующих типов:
Определение унарного оператора, где аргумент имеет тип класса или структуры.
Определение бинарного оператора, в котором по крайней мере один из аргументов имеет тип класса или структуры.
Определение оператора преобразования, где аргумент имеет тип класса или структуры.
Определение оператора преобразования, который возвращает тип класса или структуры.
Операторы преобразования всегда унарные, поэтому всегда используйте CType как оператор, который вы определяете.
Синтаксис объявления
Для объявления процедуры оператора используется следующий синтаксис:
Public Shared [Widening | Narrowing] Operatoroperatorsymbol (operand1 [, operand2]) As datatype
' Statements of the operator procedure.
End Operator
Используйте Widening или ключевое слово Narrowing только в операторе преобразования типа. Символ оператора является всегда Функция CType для оператора преобразования типа.
Объявите два операнда, чтобы определить бинарный оператор, и объявите один операнд, чтобы определить унарный оператор, включая оператор преобразования типа. Все операнды должны быть объявлены ByVal.
Объявите каждый операнд таким же образом, как вы объявили параметры для Процедуры Sub.
Тип данных
Поскольку определяется оператор на классе или структуре, определенных вами, по крайней мере один из операндов должен иметь тип данных класса или структуры. Для оператора преобразования типа операнд или возвращаемый тип должен иметь тип данных класса или структуры.
Дополнительные сведения см. в разделе Оператор Operator.
Синтаксис вызова
Вызовите процедуру оператора неявно с помощью символа оператора в выражении. Укажите операнды таким же образом, как и для предварительно определенных операторов.
При неявном вызове процедуры оператора используется следующий синтаксис:
Dim testStruct As structurename
Dim testNewStruct As structurename = testStruct operatorsymbol 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
Дополнительные сведения и примеры содержатся в Перегрузка операторов в Visual Basic 2005.
См. также
Задачи
Практическое руководство. Определение оператора
Практическое руководство. Определение оператора преобразования
Практическое руководство. Вызов процедуры оператора
Практическое руководство. Использование класса, в котором определяются операторы
Основные понятия
Параметры и аргументы процедуры