Lazy<T> 可以改變物件初始化的時機
前言
同事在專案上用了Lazy<T>
程式碼
程式碼如下
public void lazyTest()
{
Order order1 = new Order("瀧");
Console.WriteLine("new Order 完成");
Console.WriteLine("你的名字是:{0}", order1.Name);
Console.WriteLine("-------------------------------------------");
Lazy<Order> order2 = new Lazy<Order>(()=>new Order("三葉"));
Console.WriteLine("new Lazy<Order> 完成");
//order2.IsValueCreated 會是 false
Console.WriteLine("你的名字是:{0}", order2.Value.Name);
//order2.IsValueCreated 會是 true
}
public class Order
{
public Order(string name)
{
Name = name;
Console.WriteLine("Order 建構子 Run ,Name is " + Name??"無名");
}
public string Name { get; set; }
}
結果
Order 建構子 Run ,Name is 瀧
new Order 完成
你的名字是:瀧
-------------------------------------------
new Lazy<Order> 完成
Order 建構子 Run ,Name is 三葉
你的名字是:三葉
可以看到 用傳統的new的時候在new的當下就會去跑建構子
用了Lazy<T> 之後 就是等要實際執行的時候才會跑建構子
這樣的真的要用才去初始化 若沒用到就不會初始化 這樣不會浪費效能
程式碼連結
如果內容有誤請多鞭策謝謝