[C#]Lazy<T> 介紹

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> 之後 就是等要實際執行的時候才會跑建構子

這樣的真的要用才去初始化 若沒用到就不會初始化 這樣不會浪費效能

程式碼連結

dotnetfiddle.net - Lazy Test

如果內容有誤請多鞭策謝謝