Soy principalmente un desarrollador de C++, pero recientemente he estado trabajando en un proyecto en C#. Hoy encontré un comportamiento inesperado, al menos para mí, al usar los inicializadores de objetos. Espero que alguien aquí pueda explicar lo que está pasando.En C#, ¿cómo interactúan los inicializadores de objetos y los inicializadores de objetos?
Ejemplo A
public class Foo {
public bool Bar = false;
}
PassInFoo(new Foo { Bar = true });
Ejemplo B
public class Foo {
public bool Bar = true;
}
PassInFoo(new Foo { Bar = false });
Ejemplo A funciona como yo esperaría. El objeto pasado a PassInFoo tiene Bar establecido en verdadero. Sin embargo, en el Ejemplo B, foo.Bar se establece en verdadero, a pesar de que se le asignó false en el inicializador de objetos. ¿Qué estaría causando que el inicializador de objetos en el Ejemplo B fuera aparentemente ignorado?
Nada. No estás viendo lo que crees que estás viendo. – mquander
No puedo reproducir esto, .Net 3.5, ¿qué versión tiene y está seguro de que este es el comportamiento que está viendo? –
El constructor se ejecutará antes de que el inicializador de objetos y el inicializador de campo sean parte del constructor. Ver C# Specs: de 7.6.10 - El procesamiento de una expresión de creación de objeto que incluye un inicializador de objeto o inicializador de colección consiste en procesar primero el constructor de instancia y luego procesar las inicializaciones de miembro o elemento especificadas por el inicializador de objeto (§7.6.10.2) o inicializador de colección (§7.6. 10.3). – VinayC