Pranay Rana: Lazy initialization of object in C# with Lazy<T> class

Monday, July 4, 2011

Lazy initialization of object in C# with Lazy<T> class

Lazy<T> is class introduced in the .Net framework 4.0 to initialize the object later on i.e allow to initialize object when we are going to utilize or assigning value to the object.

To understand Lazy initialization consider below class.
public class Employee
    {
        public string Name { get; set; }
        public int Salary { get; set; }
        public string Address { get; set; }
        public int Id { get; set; }
    }
In the following code I am using the Employee class. As you can see I have initialize the class to null
Employee emp1=null;
     Console.WriteLine(emp1);
     ///Code do perform other task
     if(Condition)
     {
      if (emp1 == null)
        emp1 = new Employee();
     }
In above code I am initializing class when I need it rather than initializing before using it same way we can do in the Singleton design pattern, by this way we are lazing initializing the object and consume memory when need it rather than initializing it in the first line of the method.

But now .net 4.0 framework provide the new class to do this thing easily. The class is Lazy<T>. So the above code is something like as below
Lazy<employee> emp = new Lazy<employee>();
     Console.WriteLine(emp);

     emp.Value.Id = 1;
     emp.Value.Name = "pranay";
     emp.Value.Salary = 123;
     emp.Value.Address = "Ahmedabad";
     Console.WriteLine(emp);
Output of the program
As you can see in output window it display no value is defined.

Important Properties
Object is get created when we access property Value and assign value to it. To find out the detail I used reflector and which shows that the object get created when I access property.

Another the important property is IsValueCreated-Gets a value that indicates whether a value has been created for this Lazy instance.

2 comments:

  1. am glad for this great report , I am happy I detected this blog on yahoo.

    As a final note , permit me thank you for your tolerance with my English as (I am certain you have become aware this at this time ,), English is not my main language so I am utilizing Google Translate to form out what to write down what I truly wish to tell.

    ReplyDelete