11.12.2008

Inicializadores de Objetos en C# 3.0

Una de las nuevas caracterísiticas en C# 3.0 es la inicialización de objetos. En versiones anteriores del lenguaje C#, para inicializar un objeto a la hora de su construcción, se debían crear constructores con los parámetros requeridos, los cuales llevaban a cabo la inicialización del objeto que esta siendo instanciado. A partir de la versión 3.0 de C#, se pueden inicializar objetos tanto a través de constructores, como a través de inicializadores automáticos.

¿En que consisten estos inicializadores? Los inicializadores, son una manera simple de inicializar objetos a través de sus propiedades. Para comprender mejor esta característica veamos el siguiente ejemplo.

Vamos a trabajar con la clase producto definida en el post pasado. Vamos a crear una instancia de esta clase utilizando los inicializadores de objetos presentes en C# 3.0 o superior.

Como podemos ver en la siguiente imagen, cuando estamos inicializando la instancia de la clase, VS 2008 nos permite ver las propiedades existentes dentro de la clase para llevar a cabo la inicialización a través del intellisense.

image

El código completo para inicializar la instancia de prod es el siguiente.

static void Main( string[] args )
{
Producto prod = new Producto( )
{
Id = 0,
Nombre = "Impresora Canon MP140",
PaisDeOrigen = "Japón",
Precio = 50
};
Console.WriteLine("Producto: {0}", prod.Nombre);
}


El resultado de la ejecución del código anterior es el siguiente



image



Igualmente, podemos inicializar objetos dentro de otros objetos de la misma manera que hicimos la inicialización anterior.



Supongamos que existe una clase DetalleDeFactura que contiene un producto asociado y la cantidad del producto que se agregó al detalle. El código de esta clase es el que se ve a continuación:



public class DetalleDeFactura
{
public int Id { get; set; }
public int CantidadDeProducto { get; set; }
public Producto ProductoSeleccionado { get; set; }
}



Para inicializar la clase DetalleFactura utilizamos el código siguiente:



 



static void Main( string[] args )
{
DetalleDeFactura detalle = new DetalleDeFactura( )
{
Id = 1,
CantidadDeProducto = 3,
ProductoSeleccionado = new Producto( )
{
Id = 0,
Nombre = "Impresora Canon MP140",
PaisDeOrigen = "Japón",
Precio = 50
}
};

Console.WriteLine("Detalle: {0}", detalle.Id);
Console.WriteLine("Producto: {0}", detalle.ProductoSeleccionado.Nombre);
Console.WriteLine("Cantidad: {0}", detalle.CantidadDeProducto);
}



El resultado al ejecutar esta consulta es:



image



Como podemos ver, esta forma de inicializar objetos es muy intuitiva y “limpia” a la hora de digitar el código requerido para iniciar el objeto requerido. Además, esto nos permite utilizar expresiones Lambda en Linq como veremos en posts posteriores.

1 comentario:

pablo dijo...

El problema de inicializar el objeto de esta manera es que cuando se depura el error muestra despues de la inicializacion y el error no es descriptivo