Ассоциативность определяет, какая часть выражения должна быть вычислена первой. Например, результатом приведенного выражения может быть 21 или 33 в зависимости от того, какая ассоциативность будет применяться для оператора «—»: левая или правая.
42-15-6
Оператор — имеет левую ассоциативность, т. е. сначала вычисляется 42—15, а затем из результата вычитается 6. Если бы он имел правую ассоциативность, сначала вычислялась бы правая часть выражения (15—6), а затем результат вычитался бы из 42.
Все бинарные операторы (операторы с двумя операндами), кроме операторов присваивания, —
лево-ассоциативные,
т. е. они обрабатывают выражения слева направо. Таким образом,
а + Ь
using System;
class RightAssocApp {
public static void Main() {
int a = 1; int b = 2; int с = 3;
Console.WriteLine("a={0} b={1} c={2>", a, b, c); a = b = c;
Console.WriteLine("После "a=b=c
-
: a={0} b={1} c={2}", a, b, c); > >
Результат выполнения этого примера таков:
а=1 ь=2 с=3
После 'а=Ь=с': а=3 Ь=3 о=3
Поначалу вычисление выражений справа налево может сбивать с толку, но давайте подойдем к этому так: если бы оператор присваивания был лево-ассоциативным, компилятор сначала должен был бы вычислить
а = Ь,
после чего
а
было бы равно 2, а затем
b
= с и в результате
b
было бы равно 3. Конечный результат был бы
а=2 Ь=3 с=3.
Очевидно, что мы ожидаем не этого, когда пишем
а
=
b
=
с,
и именно поэтому операторы присваивания и условные операторы право-ассоциативные.