Оператор 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или OptionalParamArray для операнда.

Символ оператора или идентификатор нельзя использовать для хранения возвращаемого значения. Необходимо использовать инструкцию Return и указать значение. Любое количество инструкций Return может отображаться в любом месте процедуры.

Определение оператора таким образом называется перегрузкой оператора, независимо от того, используется Overloads ли ключевое слово. В приведенной ниже таблице перечислены операторы, которые можно определить.

Тип Операторы
Унарный +, , -IsFalse, IsTrueNot
Binary +, -, */\&^>><<=<>>>=<<=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 and Narrowing Conversions

Расширение преобразования всегда успешно выполняется во время выполнения, в то время как сужающее преобразование может завершиться ошибкой во время выполнения. Для получения дополнительной информации см. Widening and Narrowing Conversions.

Если вы объявляете процедуру преобразования, код процедуры 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

См. также