Оператор Operator

Обновлен: Ноябрь 2007

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

[ <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.

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

  • Shadows
    Необязательное. См. раздел Shadows.

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

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

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

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

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

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

    [ ByVal ] operandname [ As operandtype ]

    Компонент

    Описание

    ByVal

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

    operandname

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

    operandtype

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

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

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

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

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

Заметки

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

Все операторы должны быть Public Shared. Нельзя указывать ByRefOptional или ParamArray ни для одно из операндов.

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

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

Тип

Операторы

Унарный

+, -, IsFalse, IsTrue, Not

Binary

+, -, *, /, \, &, ^, >>, <<, =, <>, >, >=, <, <=, And, Like, Mod, Or, Xor

Преобразование (унарный)

CType

Обратите внимание, что оператор = в списке бинарных является оператором сравнения, а не оператором присваивания.

При определении CType необходимо указать либо Widening, либо Narrowing.

Совпадающие пары

Необходимо определить конкретные операторы в виде совпадающих пар. Если определен один оператор такой пары, необходимо определить и другой. Следующие пары являются соответствующими:

  • = и <>.

  • > и <.

  • >= и <=.

  • IsTrue и IsFalse.

Ограничения типа данных

Каждый определенный оператор должен включать класс или структуру, по которой он определяется. Это значит, что класс или структура должны фигурировать как тип данных следующих:

  • Операнд унарного оператора.

  • По крайней мере один из операндов бинарного оператора.

  • Или операнд или тип возвращаемого оператором преобразования значения.

Некоторые операторы имеют дополнительные ограничения типа данных, как показано ниже:

  • Если определить операторы IsTrue и IsFalse, они должны о возвращать тип Boolean.

  • Если определены операторы << и >>, они оба должны задавать тип Integer для operandtypeoperand2.

Возвращаемый тип не должен в обязательном порядке соответствовать типу одного из операндов. Например, такое оператор сравнения, как = или <>, может возвращать событие Boolean даже в том случае, если ни один операнд не имеет тип Boolean.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример

В следующем примере кода используется инструкция Operator, чтобы определить контур структуры, которая включает в себя процедуру операторов And, OrIsFalse и IsTrue. And и Or имеют по два операнда типа abc и возвращают тип abc.IsFalse и IsTrue берут по одному операнду типа abc> и возвращают Boolean>. Эти определения позволяют вызывающему коду использовать AndAndAlso, 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

Widening

Narrowing