Оператор Statement
Объявляет символ оператора, операнды и код, определяющий процедуру оператора в классе или структуре.
Синтаксис
[ <attrlist> ] Public [ Overloads ] Shared [ Shadows ] [ Widening | Narrowing ]
Operator operatorsymbol ( operand1 [, operand2 ]) [ As [ <attrlist> ] type ]
[ statements ]
[ statements ]
Return returnvalue
[ statements ]
End Operator
Детали
attrlist
Необязательно. См . список атрибутов.
Public
Обязательный. Указывает, что эта процедура оператора имеет общедоступный доступ.
Overloads
Необязательно. См . перегрузки.
Shared
Обязательный. Указывает, что эта процедура оператора является общей процедурой.
Shadows
Необязательно. См . тени.
Widening
Требуется для оператора преобразования, если не указано Narrowing
. Указывает, что эта процедура оператора определяет преобразование Widening . На этой странице справки см. раздел "Расширение и сужение преобразований".
Narrowing
Требуется для оператора преобразования, если не указано Widening
. Указывает, что эта процедура оператора определяет сужение преобразования. На этой странице справки см. раздел "Расширение и сужение преобразований".
operatorsymbol
Обязательный. Символ или идентификатор оператора, который определяет эта процедура оператора.
operand1
Обязательный. Имя и тип единого операнда унарного оператора (включая оператор преобразования) или левый операнды двоичного оператора.
operand2
Требуется для двоичных операторов. Имя и тип правого операнда двоичного оператора.
operand1
и operand2
имеет следующий синтаксис и части:
[ ByVal ] operandname [ As operandtype ]
Часть | Description |
---|---|
ByVal |
Необязательно, но механизм передачи должен быть ByVal. |
operandname |
Обязательный. Имя переменной, представляющей этот операнды. См. раздел Declared Element Names. |
operandtype |
Необязательный, если Option Strict это не так On . Тип данных этого операнда. |
type
Необязательный, если Option Strict
это не так On
. Тип данных значения, возвращаемого процедурой оператора.
statements
Необязательно. Блок инструкций, выполняющихся процедурой оператора.
returnvalue
Обязательный. Значение, возвращаемое процедурой оператора в вызывающий код.
End
Operator
Обязательный. Завершает определение этой процедуры оператора.
Замечания
Можно использовать Operator
только в классе или структуре. Это означает, что контекст объявления для оператора не может быть исходным файлом, пространством имен, модулем, интерфейсом, процедурой или блоком. Дополнительные сведения см. в разделе Контексты объявления и уровни доступа по умолчанию.
Все операторы должны быть Public Shared
. Нельзя указать ByRef
или Optional
ParamArray
для операнда.
Символ оператора или идентификатор нельзя использовать для хранения возвращаемого значения. Необходимо использовать инструкцию Return
и указать значение. Любое количество инструкций Return
может отображаться в любом месте процедуры.
Определение оператора таким образом называется перегрузкой оператора, независимо от того, используется ли ключевое Overloads
слово. В приведенной ниже таблице перечислены операторы, которые можно определить.
Тип | Операторы |
---|---|
Унарный | + , , - IsFalse , IsTrue Not |
Binary | + , - , * / \ & ^ >> << = <> > >= < <= And Like Mod Or Xor |
Преобразование (унарный) | CType |
Обратите внимание, что =
оператор в двоичном списке является оператором сравнения, а не оператором назначения.
При определении CType
необходимо указать либо Widening
или Narrowing
.
Сопоставленные пары
Необходимо определить определенные операторы как соответствующие пары. Если определить один из операторов такой пары, необходимо также определить другой. Сопоставленные пары приведены ниже.
=
и<>
>
и<
>=
и<=
IsTrue
иIsFalse
Ограничения типов данных
Каждый определяемый оператор должен включать класс или структуру, в которой она определена. Это означает, что класс или структура должны отображаться как тип данных следующего вида:
Операнды унарного оператора.
По крайней мере один из операндов двоичного оператора.
Операнд или возвращаемый тип оператора преобразования.
Некоторые операторы имеют дополнительные ограничения типа данных, как показано ниже.
Если вы определяете
IsTrue
иIsFalse
операторы, они должны возвращатьBoolean
тип.Если вы определяете
<<
операторы и>>
определяетеInteger
операторы, они должны указывать тип дляoperandtype
operand2
объекта .
Возвращаемый тип не должен соответствовать типу операнда. Например, оператор сравнения, например =
или может возвращатьBoolean
, даже если ни операнда не существуетBoolean
<>
.
Логические и побитовые операторы
Or
Операторы And
и Not
Xor
операторы могут выполнять логические или битовые операции в Visual Basic. Однако если определить один из этих операторов в классе или структуре, можно определить только побитовую операцию.
Оператор нельзя определить AndAlso
непосредственно с помощью инструкции Operator
. Однако можно использовать AndAlso
, если выполнены следующие условия:
Вы определились
And
с теми же типами операндов, дляAndAlso
которых вы хотите использовать.And
Определение возвращает тот же тип, что и класс или структура, в которой она определена.Вы определили
IsFalse
оператор класса или структуры, в которой вы определилиAnd
.
Аналогичным образом можно использовать OrElse
, если вы определили Or
на одних операндах, с типом возвращаемого типа класса или структуры, и вы определили IsTrue
в классе или структуре.
Widening and Narrowing Conversions
Расширение преобразования всегда успешно выполняется во время выполнения, в то время как сужающее преобразование может завершиться ошибкой во время выполнения. Для получения дополнительной информации см. Widening and Narrowing Conversions.
Если вы объявляете процедуру преобразования, код процедуры Widening
не должен создавать ошибки. Это означает следующее:
Он всегда должен возвращать допустимое значение типа
type
.Он должен обрабатывать все возможные исключения и другие условия ошибки.
Он должен обрабатывать любую ошибку, возвращаемую из любых процедур, которые он вызывает.
Если существует любая вероятность того, что процедура преобразования может завершиться ошибкой, или что она может вызвать необработанное исключение, необходимо объявить его Narrowing
.
Пример
В следующем примере кода оператор используется Operator
для определения структуры, включающей процедуры оператора для IsFalse
And
Or
операторов , и IsTrue
операторов. And
и Or
каждый принимает два операнда типа abc
и возвращаемого типа abc
. IsFalse
и IsTrue
каждый принимает один операнду типа abc
и возвращаемого Boolean
значения. Эти определения позволяют использовать And
вызывающий код , AndAlso
Or
а также OrElse
операнды типаabc
.
Public Structure abc
Dim d As Date
Public Shared Operator And(ByVal x As abc, ByVal y As abc) As abc
Dim r As New abc
' Insert code to calculate And of x and y.
Return r
End Operator
Public Shared Operator Or(ByVal x As abc, ByVal y As abc) As abc
Dim r As New abc
' Insert code to calculate Or of x and y.
Return r
End Operator
Public Shared Operator IsFalse(ByVal z As abc) As Boolean
Dim b As Boolean
' Insert code to calculate IsFalse of z.
Return b
End Operator
Public Shared Operator IsTrue(ByVal z As abc) As Boolean
Dim b As Boolean
' Insert code to calculate IsTrue of z.
Return b
End Operator
End Structure
См. также
- Оператор IsFalse
- Оператор IsTrue
- Расширение
- Narrowing
- Widening and Narrowing Conversions
- Процедуры операторов
- Практическое руководство. Определение оператора
- Практическое руководство. Определение оператора преобразования
- Практическое руководство. Вызов процедуры оператора
- Практическое руководство. Использование класса, в котором определяются операторы