Operatorrangfolge in Visual Basic

Wenn mehrere Vorgänge in einem Ausdruck auftreten, wird jedes Teil in einer vordefinierten Reihenfolge als Operatorvorfolge ausgewertet und aufgelöst.

Rangfolgesregeln

Wenn Ausdrücke Operatoren aus mehreren Kategorien enthalten, werden sie gemäß den folgenden Regeln ausgewertet:

  • Die Arithmetik- und Verketteungsoperatoren verfügen über die Reihenfolge der Rangfolge, die im folgenden Abschnitt beschrieben wird, und alle haben größere Priorität als die Vergleichs-, logischen und Bitzeigeroperatoren.

  • Alle Vergleichsoperatoren haben die gleiche Priorität, und alle haben größere Priorität als die logischen und bitweisen Operatoren, aber niedrigere Rangfolge als die arithmetischen und Verketteungsoperatoren.

  • Die logischen und bitweisen Operatoren verfügen über die Reihenfolge der Rangfolge, die im folgenden Abschnitt beschrieben wird, und alle haben eine niedrigere Rangfolge als die arithmetischen, Verketteungs- und Vergleichsoperatoren.

  • Operatoren mit gleicher Priorität werden links nach rechts in der Reihenfolge ausgewertet, in der sie im Ausdruck angezeigt werden.

Rangfolge

Operatoren werden in der folgenden Reihenfolge der Rangfolge ausgewertet:

Await-Operator

Await-

Arithmetische und Verketteungsoperatoren

Exponentiation (^)

Unary Identität und Negation (+, )

Multiplikation und Gleitkommabereich (*, /)

Ganze Zahl (\)

Modular arithmetische (Mod)

Ergänzung und Subtraktion (+, )

Zeichenfolgenkoncatenation (&)

Arithmetische Bitverschiebung (<<, >>)

Vergleichsoperatoren

Alle Vergleichsoperatoren (=, <>, >Is<=<IsNotLike>=TypeOf...)Is

Logische und bitweise Operatoren

Negation (Not)

Verbindung (And, AndAlso)

Inklusive Verjunktion (Or, OrElse)

Exklusive Verjunktion (Xor)

Kommentare

Der = Operator ist nur der Gleichheitsvergleichsoperator, nicht der Zuordnungsoperator.

Der Zeichenfolgenkoncatenationsoperator () ist kein arithmetischer Operator,& sondern in der Rangfolge mit den arithmetischen Operatoren gruppiert.

Die Is Operatoren IsNot sind Objektreferenzvergleichsoperatoren. Sie vergleichen nicht die Werte von zwei Objekten; sie überprüfen nur, ob zwei Objektvariablen auf dieselbe Objektinstanz verweisen.

Assoziativität

Wenn Operatoren der gleichen Priorität in einem Ausdruck zusammen erscheinen, z. B. Multiplikation und Division, ausgewertet der Compiler jeden Vorgang, da er von links nach rechts auftritt. Dies wird anhand des folgenden Beispiels veranschaulicht.

Dim n1 As Integer = 96 / 8 / 4
Dim n2 As Integer = (96 / 8) / 4
Dim n3 As Integer = 96 / (8 / 4)

Der erste Ausdruck bewertet die Division 96 / 8 (was zu 12 führt) und dann die Division 12 / 4, die zu drei führt. Da der Compiler die Vorgänge von links nach n1 rechts auswertet, ist die Auswertung identisch, wenn diese Reihenfolge explizit für n2angegeben ist. Beide n1 und n2 haben ein Ergebnis von drei. Im Gegensatz n3 dazu hat der Compiler ein Ergebnis von 48, da die Klammern den Compiler erzwingen, 8 / 4 zuerst zu bewerten.

Aufgrund dieses Verhaltens sollen Operatoren in Visual Basic zuordnend sein.

AußerKraftsetzung der Rangfolge und Associativität

Sie können Klammern verwenden, um einige Teile eines Ausdrucks zu erzwingen, bevor andere ausgewertet werden. Dies kann sowohl die Reihenfolge der Rangfolge als auch die linke Zuordnung außer Kraft setzen. Visual Basic führt immer Vorgänge aus, die in Klammern vor denen außerhalb eingeschlossen sind. Innerhalb von Klammern behält sie jedoch gewöhnliche Rangfolge und Assoziivität bei, es sei denn, Sie verwenden Klammern innerhalb der Klammern. Dies wird anhand des folgenden Beispiels veranschaulicht.

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

Weitere Informationen