Lazy initialization en .NET 4

by Misael Monterroca 26. October 2009 06:27

La inicialización del tipo Lazy (la traducción seria perezosa pero se refiere al hecho de crear un objeto hasta el momento de realmente utilizarlo aún y cuando el objeto sea instanciado en líneas anteriores) permite optimizar la manera en que creamos nuestros objetos.  En .Net. C# 4.0 se introduce la clase Lazy<T> que permite inicializar los objetos hasta que realmente los vayamos a utilizar, veamos el siguiente ejemplo:

class Program
{
    static void Main(string[] args)
    {
        Lazy<Prueba> f = new Lazy<Prueba>( );
        Console.WriteLine("Prueba es definida");
        if (!f.IsValueCreated) Console.WriteLine("Prueba aún no ha sido inicializada");
        Console.WriteLine("Prueba::ID=" + (f.Value as Prueba).ID);
        
        if (f.IsValueCreated) Console.WriteLine("Prueba ahora si está inicializada");
        Console.Read();
    }
} 

public class Prueba
{
    public int ID { get; set; }
    
    public Prueba()
    {
        Console.WriteLine("Prueba:: El constructor es llamado");
        ID = 1;
    }
}

La ejecución obtendría el siguiente resultado:

Prueba es definida
Prueba aún no ha sido inicializada
Prueba:: El constructor es llamado
Prueba::ID=1
Prueba ahora si está inicializada

Como podemos ver el objeto Prueba se crea sólo cuando f.Value es accesado.

Tags: ,

C# | C# 4.0

Comments

Add comment


(Will show your Gravatar icon)

  Country flag

biuquote
  • Comment
  • Preview
Loading



MVP