Basierend auf welchen Vorrangregeln ist ein [x] .SomeMember als (a [x]) bewertet. SomeMember und nicht ...? - c #, .net, clr

a) Sowohl der Punktoperator (a.x) als auch der Indexoperator (a [x]) haben die gleiche Prioritätsstufe. Also basierend auf welchen Vorrangregeln ist ein Ausdruck a[x].SomeMember bewertet als (a[x]).SomeMember und nicht so (a.SomeMember )[x]?

b) Ist der Castingoperator ein unärer Operator (und hat somit eine niedrigere Priorität als der Punktoperator) und ist deshalb ein Ausdruck (int)a.xbewertet als (int)(a.x)?

Danke

Antworten:

2 für die Antwort № 1

Für ein)

Aus der C # Spezifikation, Abschnitt 7.2.1:

Wenn ein Operand zwischen zwei Operatoren mit derselben Priorität auftritt, steuert die Assoziativität der Operatoren die Reihenfolge, in der die Operationen ausgeführt werden:

  • Mit Ausnahme der Zuweisungsoperatoren sind alle binären Operatoren linksassoziativ, was bedeutet, dass Operationen von links nach rechts ausgeführt werden. Zum Beispiel wird x + y + z als (x + y) + z ausgewertet.
  • Die Zuweisungsoperatoren und der Bedingungsoperator (? :) sind rechtsassoziativ, was bedeutet, dass Operationen von rechts nach links ausgeführt werden. Zum Beispiel wird x = y = z als x = (y = z) bewertet.

Dies bedeutet, dass die Operatoren in dieser Situation von links nach rechts Vorrang haben.

b) Ja, das ist richtig.Dies ist ein Cast-Ausdruck, der in Abschnitt 7.6.6 beschrieben wird, der auf einen unären Ausdruck angewendet wird, und Umwandlungen werden mit den Unary-Operatoren kategorisiert (Abschnitt 7.6) und mit der gleichen Priorität behandelt.


1 für die Antwort № 2

a) Der Vorrang ist eine Priorität von links nach rechts.Bei der Auswertung der Referenzen geht der Compiler von links nach rechts vor, um zu bestimmen, welche gleichwertigen Operatoren die Priorität erhalten. Da a [x] vor [x] .SomeMember steht, wird es zuerst referenziert.

b) Es ist kein unärer Operator, sondern hat den gleichen Vorrang wie ein unärer Operator.

Vorrang der C # -Operatoren


1 für die Antwort № 3

a) Basierend auf der Reihenfolge des Codes. a = b wird anders interpretiert als b = a aus dem gleichen Grunde!

b) Casting ist ein unärer Operator wie beschrieben Hier. Sein spezifisches Verhalten wird erklärt Hier.


Speisekarte