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


Оператор Operator

Объявляет символ оператора, операнды и код, определяющие процедуру оператора с классом или структурой.

[ <attrlist> ] Public [ Overloads ] Shared [ Shadows ] [ Widening | Narrowing ] 
Operator operatorsymbol ( operand1 [, operand2 ]) [ As [ <attrlist> ] type ]
    [ statements ]
    [ statements ]
    Return returnvalue
    [ statements ]
End Operator

Части

  • attrlist
    Необязательный. См. Список атрибутов.

  • Public
    Обязательный. Означает, что эта процедура оператора имеет доступ Public (Visual Basic).

  • Overloads
    Необязательный. Дополнительные сведения см. в разделе Overloads (Visual Basic).

  • Shared
    Обязательный. Указывает, что эта процедура оператора является процедурой Shared (Visual Basic).

  • Shadows
    Необязательный. Дополнительные сведения см. в разделе Shadows (Visual Basic).

  • Widening
    Требуется для оператора преобразования, если не указан Narrowing. Указывает, что эта процедура оператора определяет преобразование Widening (Visual Basic). См. раздел "Расширяющие и сужающие преобразования" на этой странице справки.

  • Narrowing
    Требуется для оператора преобразования, если не указан Widening. Указывает, что эта процедура оператора определяет преобразование Narrowing (Visual Basic). См. раздел "Расширяющие и сужающие преобразования" на этой странице справки.

  • operatorsymbol
    Обязательный. Символ или идентификатор оператора, который определяет эта процедура оператора.

  • operand1
    Обязательный. Имя и тип одного операнда унарного оператора (включая оператор преобразования) или левого операнда бинарного оператора.

  • operand2
    Требуется для бинарных операторов. Имя и тип правого операнда бинарного оператора.

    operand1 and operand2 имеют следующий синтаксис и составляющие:

    [ ByVal ] operandname [ As operandtype ]

    Часть

    Описание

    ByVal

    Необязательно, но механизм передачи должен быть ByVal (Visual Basic).

    operandname

    Обязательный. Имя переменной, представляющей этот операнд. См. раздел Имена объявленных типов (Visual Basic).

    operandtype

    Необязательно, если Option Strict не установлен в On. Тип данных этого операнда.

  • type
    Необязательно, если Option Strict не установлен в On. Тип данных значения, возвращаемый процедурой оператора.

  • statements
    Необязательный. Блок операторов, который возвращает процедура оператора.

  • returnvalue
    Обязательный. Значение, которое процедура оператора возвращает в вызывающий код.

  • End Operator
    Обязательный. Завершает определение данной процедуры оператора.

Заметки

Operator можно использовать только в классе или структуре. Это означает, что контекст объявления для оператора не может быть исходным файлом, пространством имен, модулем, интерфейсом, процедурой или блоком. Дополнительные сведения см. в разделе Контексты объявления и уровни доступа по умолчанию (Visual Basic).

Все операторы должны быть 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.

Логические и побитовые операторы

Операторы And, Or Not и Xor могут выполнять в Visual Basic логические или побитовые операции. Однако, если определить один из этих операторов на классе или структуре, можно определить только его побитовую операцию.

Невозможно определить оператор AndAlso непосредственно оператором Operator. Однако, можно использовать AndAlso, если выполнены следующие условия:

  • Определен And на одинаковых типах операндов, которые требуется использовать для AndAlso.

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

  • Определен оператор IsFalse класса или структуры, на котором Вы определили And.

Аналогично можно использовать OrElse, если определены Or на одних и тех же операндах с типом возвращаемого класса или структуры, и определено IsTrue на классе или структуре.

Расширяющие и сужающие преобразования

Расширяющее преобразование всегда успешно во время выполнения, а в сужающем преобразовании во время выполнения может возникать сбой. Дополнительные сведения см. в разделе Расширяющие и сужающие преобразования (Visual Basic).

Если объявить процедуру преобразования Widening, ваш код процедуры не должен давать сбои. Это означает следующее:

  • Он должен всегда возвращать допустимое значение типа type.

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

  • Он должен обрабатывать любую ошибку, возвращаемую из любой процедуры, которую он вызывает.

Если есть вероятность того, что процедура преобразования может не завершиться или что она может вызвать необработанное исключение, необходимо объявить ее как Narrowing.

Пример

В следующем примере кода с помощью оператора Operator определяется контур структуры, содержащей процедуры для операторов And, Or, IsFalse и 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

См. также

Задачи

Практическое руководство. Определение оператора (Visual Basic)

Практическое руководство. Определение оператора преобразования (Visual Basic)

Практическое руководство. Вызов процедуры оператора (Visual Basic)

Практическое руководство. Использование класса, в котором определяются операторы (Visual Basic)

Ссылки

Оператор IsFalse (Visual Basic)

Оператор IsTrue (Visual Basic)

Widening (Visual Basic)

Narrowing (Visual Basic)

Основные понятия

Расширяющие и сужающие преобразования (Visual Basic)

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