Tenga en cuenta que C# no cumple con la regla BODMAS de la forma en que aprendió en la escuela. Suponga que tiene:
A().x = B() + C() * D();
que te pueden ingenuamente pensar que la multiplicación se "hace primero", entonces la adición, y la asignación pasado, y por lo tanto, esto es el equivalente a:
c = C();
d = D();
product = c * d;
b = B();
sum = b + product;
a = A();
a.x = sum;
Pero eso no es lo que sucede La regla BODMAS solo requiere que las operaciones se realicen en el orden correcto; los operandos se pueden calcular en cualquier orden.
En C#, los operandos se calculan de izquierda a derecha. Así pues, en este caso, lo que sucedería es lógicamente lo mismo que:
a = A();
b = B();
c = C();
d = D();
product = c * d;
sum = b + product;
a.x = sum;
También, C# no hace cada multiplicación antes cada adición. Por ejemplo:
A().x = B() + C() + D() * E();
se calcula como:
a = A();
b = B();
c = C();
sum1 = b + c;
d = D();
e = E();
product = d * e;
sum2 = sum1 + product;
a.x = sum2;
See, la adición más a la izquierda ocurre antes de la multiplicación; la multiplicación solo tiene que ocurrir antes de la más a la derecha Además.
Básicamente, la regla es "entrelazar la expresión correctamente entre paréntesis para que solo tenga operadores binarios, y luego evaluar el lado izquierdo de cada operador binario antes del lado derecho". Entonces nuestro ejemplo sería:
A().x = ((B() + C()) + (D() * E()));
y ahora está claro. La adición más a la izquierda es un operando a la suma más a la derecha, y por lo tanto, la suma más a la izquierda debe ejecutarse antes de la multiplicación, porque el operando izquierdo siempre se ejecuta antes del operando derecho.
Si este tema le interesa, ver mis artículos sobre el mismo:
http://blogs.msdn.com/b/ericlippert/archive/tags/precedence/
Esto depende del idioma. .NET es un marco. – Groo
Para C# http://msdn.microsoft.com/en-us/library/6a71f45d(v=vs.80).aspx –
De acuerdo con los documentos, la C# no sigue a BODMAS así que puede mostrar algún código que pruebe lo hace. –