Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
При выполнении нескольких операций в выражении каждая часть вычисляется и разрешается в предопределенном порядке, называемом приоритетом оператора.
Правила приоритета
Если выражения содержат операторы из нескольких категорий, они оцениваются в соответствии со следующими правилами:
Операторы арифметики и объединения имеют порядок приоритета, описанного в следующем разделе, и все имеют больше приоритета, чем сравнение, логические и битовые операторы. Более высокий приоритет означает, что эти операторы оцениваются сначала.
Все операторы сравнения имеют равный приоритет, и все имеют больший приоритет, чем логические и битовые операторы, но более низкий приоритет, чем арифметические и сцепления операторов.
Логические и битовые операторы имеют порядок приоритета, описанного в следующем разделе, и все имеют более низкий приоритет, чем арифметические, сцепления и операторы сравнения.
Операторы с равным приоритетом оцениваются слева направо в том порядке, в котором они отображаются в выражении.
Порядок приоритета
Операторы оцениваются в следующем порядке приоритета. Операторы, перечисленные в списке, сначала имеют более высокий приоритет и оцениваются до того, как операторы перечислены позже:
1. Оператор Await
Ждать
2. Арифметические и сцепления операторов
Экспонентация (^)
Унарное удостоверение и отрицание (+, –)
Умножение и деление с плавающей запятой (*, /)
Целочисленный деление (\)
Модульный арифметический (Mod)
Добавление и вычитание (+, –)
Объединение строк (&)
Арифметический битовый сдвиг (<<, >>)
3. Операторы сравнения
Все операторы сравнения (=, <><<=>>=Is, IsNotLikeTypeOf... )Is
4. Логические и битовые операторы
Отрицание (Not)
Сочетание (And, AndAlso)
Инклюзивная дисъюнкционация (Or, OrElse)
Эксклюзивная дисъюнкция (Xor)
Комментарии
Оператор = является только оператором сравнения равенства, а не оператором назначения.
Оператор объединения строк (&) не является арифметическим оператором, но в приоритете он сгруппирован с арифметическими операторами.
Операторы Is — IsNot это операторы сравнения ссылок на объекты. Они не сравнивают значения двух объектов; Они проверяют только, чтобы определить, относятся ли две переменные объекта к одному экземпляру объекта.
Ассоциативность
Если операторы равного приоритета отображаются вместе в выражении, например умножение и деление, компилятор вычисляет каждую операцию по мере того, как она обнаруживает ее слева направо. В следующем примере показано это.
Dim n1 As Integer = 96 / 8 / 4
Dim n2 As Integer = (96 / 8) / 4
Dim n3 As Integer = 96 / (8 / 4)
Первое выражение вычисляет деление 96/8 (которое приводит к 12), а затем деление 12/4, что приводит к трем. Так как компилятор вычисляет операции n1 слева направо, оценка совпадает, если этот порядок явно указан для n2. Оба n1 и n2 имеют результат трех. В отличие от этого, n3 имеет результат 48, так как скобки принудительно компилятору оценить 8/4 в первую очередь.
Из-за этого операторы, как говорят, остаются ассоциативными в Visual Basic.
Переопределение приоритета и ассоциативности
Скобки можно использовать для принудительной оценки некоторых частей выражения перед другими. Это может переопределить порядок приоритета и левой ассоциативности. Visual Basic всегда выполняет операции, заключенные в скобки перед внешними. Однако в скобках он сохраняет обычный приоритет и ассоциативность, если в скобках не используются скобки. В следующем примере показано это.
Dim a, b, c, d, e, f, g As Double
a = 8.0
b = 3.0
c = 4.0
d = 2.0
e = 1.0
f = a - b + c / d * e
' The preceding line sets f to 7.0. Because of natural operator
' precedence and associativity, it is exactly equivalent to the
' following line. Division and multiplication (/, *) have higher
' precedence than addition and subtraction (+, -), so c / d * e
' is evaluated first, then the addition and subtraction from left to right.
f = (a - b) + ((c / d) * e)
' The following line overrides the natural operator precedence
' and left associativity.
g = (a - (b + c)) / (d * e)
' The preceding line sets g to 0.5.