Sample Class:
public class Product
{
public Product()
{
//do many things here ,will take long time
Thread.Sleep(1000);
}
public int Id { get; set; }
public string Name { get; set; }
public string TypeCode { get; set; }
}
Sample class test lazy loading: public class LazyLoadingTest
{
public Product GetProduct(int id, string name, string typecode)
{
return new Product()
{
Id = id,
Name = name,
TypeCode = typecode
};
}
public Lazy<Product> GetLazyProduct(int id, string name, string typecode)
{
return new Lazy<Product>(() =>
new Product() {Id = id, Name = name, TypeCode = typecode});
}
}
Test code: var llt = new LazyLoadingTest();
var p1 = llt.GetProduct(1, "tablet", "x101");
//As Product is not lazy loading obj , so here constructure will be created.
var p2 = llt.GetLazyProduct(2, "computer", "y202");
var productName1 = p1.Name;
var productName2 = p2.Value.Name;
// As P2 is a lazy product object , only when P2 object is using , there is a construction here .