Saltar al contenido

¿Cuál es la diferencia entre un inicializador de objeto y un constructor?

Solución:

Los inicializadores de objetos se agregaron a C # 3, para simplificar la construcción de objetos cuando estás usando un objeto.

Los constructores se ejecutan, con 0 o más parámetros, y se utilizan para crear e inicializar un objeto. antes de el método de llamada obtiene el identificador del objeto creado. Por ejemplo:

MyObject myObjectInstance = new MyObject(param1, param2);

En este caso, el constructor de MyObject se ejecutará con los valores param1 y param2. Ambos se utilizan para crear el nuevo MyObject en memoria. El objeto creado (que se configura utilizando esos parámetros) se devuelve y se establece en myObjectInstance.

En general, se considera una buena práctica que un constructor requiera los parámetros necesarios para configurar completamente un objeto, de modo que sea imposible crear un objeto en un estado no válido.

Sin embargo, a menudo hay propiedades “adicionales” que se pueden establecer, pero no son obligatorias. Esto podría manejarse a través de constructores sobrecargados, pero conduce a tener muchos constructores que no son necesariamente útiles en la mayoría de las circunstancias.

Esto conduce a inicializadores de objetos: un inicializador de objetos le permite establecer propiedades o campos en su objeto después ha sido construido, pero antes de puedes usarlo para cualquier otra cosa. Por ejemplo:

MyObject myObjectInstance = new MyObject(param1, param2)
{
    MyProperty = someUsefulValue
};

Esto se comportará de la misma manera que si hiciera esto:

MyObject myObjectInstance = new MyObject(param1, param2);
myObjectInstance.MyProperty = someUsefulValue;

Sin embargo, en multiproceso entornos, la atomicidad del inicializador del objeto puede ser beneficiosa, ya que evita que el objeto esté en un estado no totalmente inicializado (consulte esta respuesta para obtener más detalles): es nulo o inicializado como pretendía.

Además, los inicializadores de objetos son más sencillos de leer (especialmente cuando establece varios valores), por lo que le brindan el mismo beneficio que muchas sobrecargas en el constructor, sin la necesidad de tener muchas sobrecargas que compliquen la API para esa clase.

Un constructor es un método definido en un tipo que toma un número específico de parámetros y se usa para crear e inicializar un objeto.

Un inicializador de objeto es un código que se ejecuta en un objeto después de un constructor y se puede utilizar para establecer de forma sucinta cualquier número de campos del objeto en valores especificados. La configuración de estos campos se produce después se llama al constructor.

Usaría un constructor sin la ayuda de un inicializador de objeto si el constructor establece suficientemente el estado inicial del objeto. Sin embargo, se debe utilizar un inicializador de objeto junto con un constructor. La sintaxis requiere el uso explícito o implícito (VB.Net y C #) de un constructor para crear el objeto inicial. Usaría un inicializador de objeto cuando el constructor no inicializa suficientemente el objeto para su uso y algunos conjuntos de propiedades y / o campos simples lo harían.

Cuando tu lo hagas

Person p = new Person { Name = "a", Age = 23 };

esto es lo que hace esencialmente un inicializador de objeto:

Person tmp = new Person(); //creates temp object calling default constructor
tmp.Name = "a";
tmp.Age = 23;
p = tmp;

Ahora bien, esto facilita un comportamiento como este. Es importante saber cómo funcionan los inicializadores de objetos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *