suma pemdas parentesis para orden operaciones multiplicacion matematicas las ejercicios definicion cual combinadas .net syntax object-initializers

.net - parentesis - pemdas ejercicios



Orden de operaciones utilizando la sintaxis del inicializador de objetos (1)

Sí.

Disculpas por ser interrumpido (de hecho, tengo que trabajar un poco cada cierto tiempo). La especificación no lo dice explícitamente , pero hace que sea bastante clara la OMI en la sección 7.6.10.2:

Un inicializador de objetos consiste en una secuencia de inicializadores de miembros, encerrados por {y} tokens y separados por comas.

(Tenga en cuenta la palabra "secuencia" aquí, en lugar de "establecer". Personalmente, creo que es significativo, ya que se ordena una secuencia).

La siguiente clase representa un punto con dos coordenadas:

public class Point { int x, y; public int X { get { return x; } set { x = value; } } public int Y { get { return y; } set { y = value; } } }

Se puede crear una instancia de Point e inicializarla de la siguiente manera:

Point a = new Point { X = 0, Y = 1 };

que tiene el mismo efecto que

Point __a = new Point(); __a.X = 0; __a.Y = 1; Point a = __a;

donde __a es una variable temporal invisible y de otra manera inaccesible.

EDITAR: He recibido una respuesta de Mads Torgersen, quien básicamente ha dicho que cualquier cosa que se pueda hacer ahora preservará el orden. Puede haber algunas rarezas en el futuro donde el orden no se conserve en casos extraños en los que esté haciendo algo más que establecer una propiedad / campo, pero eso dependerá del idioma.

Vale la pena señalar que en realidad se están dando muchos pasos aquí: existe el orden de ejecución de la evaluación de los argumentos (es decir, los bits RHS) y el orden de ejecución de las asignaciones. Por ejemplo, si tiene:

new Foo { A = X, B = Y }

todas las siguientes órdenes son posibles mientras se mantiene el orden de la ejecución real de la propiedad (A y B):

  • Evalúa X, asigna a A, evalúa Y, asigna a B
  • Evalúa X, evalúa Y, asigna a A, asigna a B
  • Evalúa Y, evalúa X, asigna a A, asigna a B

Creo que la primera opción es la que realmente se toma, pero esto fue solo para demostrar que hay más de lo que parece.

También sería muy cuidadoso de escribir código que depende de esto ...

¿El orden en el que establezco las propiedades usando la sintaxis del inicializador de objetos se ejecuta en el mismo orden?

Por ejemplo, si hago esto:

var s = new Person { FirstName = "Micah", LastName = "Martin", IsLoaded = true }

cada propiedad se establecerá en el mismo orden?