Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Объявляет символ оператора, операнды и код, определяющий процедуру оператора в классе или структуре.
Синтаксис
[ <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 ]
| Часть | Описание |
|---|---|
ByVal |
Необязательно, но механизм передачи должен быть ByVal. |
operandname |
Обязательное. Имя переменной, представляющей этот операнды. См. объявленные имена элементов. |
operandtype |
Необязательный, если Option Strict это не так On. Тип данных этого операнда. |
type
Необязательный, если Option Strict это не так On. Тип данных значения, возвращаемого процедурой оператора.
statements
Необязательно. Блок инструкций, выполняющихся процедурой оператора.
returnvalue
Обязательное. Значение, возвращаемое процедурой оператора в вызывающий код.
End
Operator
Обязательное. Завершает определение этой процедуры оператора.
Замечания
Можно использовать Operator только в классе или структуре. Это означает, что контекст объявления для оператора не может быть исходным файлом, пространством имен, модулем, интерфейсом, процедурой или блоком. Дополнительные сведения см. в разделе "Контексты объявления" и "Уровни доступа по умолчанию".
Все операторы должны быть Public Shared. Нельзя указать ByRefили OptionalParamArray для операнда.
Символ оператора или идентификатор нельзя использовать для хранения возвращаемого значения. Необходимо использовать инструкцию Return и указать значение. Любое количество инструкций Return может отображаться в любом месте процедуры.
Определение оператора таким образом называется перегрузкой оператора, независимо от того, используется ли ключевое Overloads слово. В следующей таблице перечислены операторы, которые можно определить.
| Тип | Операторы |
|---|---|
| Унарный |
+, , -IsFalse, IsTrueNot |
| Бинарный |
+, -, */\&^>><<=<>>>=<<=AndLikeModOrXor |
| Преобразование (унарный) | CType |
Обратите внимание, что = оператор в двоичном списке является оператором сравнения, а не оператором назначения.
При определении CTypeнеобходимо указать либо Widening или Narrowing.
Сопоставленные пары
Необходимо определить определенные операторы как соответствующие пары. Если определить один из операторов такой пары, необходимо также определить другой. Сопоставленные пары приведены ниже.
=и<>.>и<.>=и<=.IsTrueиIsFalse.
Ограничения типов данных
Каждый определяемый оператор должен включать класс или структуру, в которой она определена. Это означает, что класс или структура должны отображаться как тип данных следующего вида:
Операнды унарного оператора.
По крайней мере один из операндов двоичного оператора.
Операнд или возвращаемый тип оператора преобразования.
Некоторые операторы имеют дополнительные ограничения типа данных, как показано ниже.
Если вы определяете
IsTrueиIsFalseоператоры, они должны возвращатьBooleanтип.Если вы определяете
<<операторы и>>определяетеIntegerоператоры, они должны указывать тип дляoperandtypeoperand2объекта .
Возвращаемый тип не должен соответствовать типу операнда. Например, оператор сравнения, например = или может возвращатьBoolean, даже если ни операнда не существуетBoolean<>.
Логические и битовые операторы
OrОператоры Andи NotXor операторы могут выполнять логические или битовые операции в Visual Basic. Однако если определить один из этих операторов в классе или структуре, можно определить только побитовую операцию.
Оператор нельзя определить AndAlso непосредственно с помощью инструкции Operator . Однако можно использовать AndAlso , если выполнены следующие условия:
Вы определились
Andс теми же типами операндов, дляAndAlsoкоторых вы хотите использовать.AndОпределение возвращает тот же тип, что и класс или структура, в которой она определена.Вы определили
IsFalseоператор класса или структуры, в которой вы определилиAnd.
Аналогичным образом можно использовать OrElse , если вы определили Or на одних операндах, с типом возвращаемого типа класса или структуры, и вы определили IsTrue в классе или структуре.
Расширение и сужение преобразований
Расширение преобразования всегда успешно выполняется во время выполнения, в то время как сужающее преобразование может завершиться ошибкой во время выполнения. Дополнительные сведения см. в разделе "Расширение и сужение преобразований".
Если вы объявляете процедуру преобразования, код процедуры Wideningне должен создавать ошибки. Это означает следующее:
Он всегда должен возвращать допустимое значение типа
type.Он должен обрабатывать все возможные исключения и другие условия ошибки.
Он должен обрабатывать любую ошибку, возвращаемую из любых процедур, которые он вызывает.
Если существует любая вероятность того, что процедура преобразования может завершиться ошибкой, или что она может вызвать необработанное исключение, необходимо объявить его Narrowing.
Пример
В следующем примере кода оператор используется Operator для определения структуры, включающей процедуры оператора для IsFalseAndOrоператоров , и IsTrue операторов.
And и Or каждый принимает два операнда типа abc и возвращаемого типа abc.
IsFalse и IsTrue каждый принимает один операнду типа abc и возвращаемого Booleanзначения. Эти определения позволяют использовать Andвызывающий код , AndAlsoOrа также 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
- Расширение
- Сужение
- Расширение и сужение конверсий
- Процедуры оператора
- Практическое руководство. Определение оператора
- Практическое руководство. Определение оператора преобразования
- Как вызвать процедуру оператора
- Практическое руководство. Использование класса, определяющего операторы