In some Senario, may only need to init the object when using ,so lazyLoading will be a good choice.
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 .
URL:http://www.bianceng.cn/Programming/csharp/201410/45753.htm