最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用Lazy<T>實(shí)現(xiàn)對(duì)客戶(hù)訂單的延遲加載

 更新時(shí)間:2022年08月27日 10:15:26   作者:Darren Ji  
這篇文章介紹了C#使用Lazy<T>實(shí)現(xiàn)對(duì)客戶(hù)訂單延遲加載的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

"延遲加載"是指在需要的時(shí)候再加載數(shù)據(jù)。比如獲得一個(gè)Customer信息,并不會(huì)把該Customer的Orders信息一下加載出來(lái),當(dāng)需要顯示Orders的時(shí)候再加載。簡(jiǎn)單來(lái)說(shuō),就是按需加載。使用"延遲加載"的好處是減少應(yīng)用程序響應(yīng)時(shí)間,降低內(nèi)存消耗,避免不必要的數(shù)據(jù)庫(kù)交互。

即時(shí)加載

創(chuàng)建Order類(lèi)和Customer類(lèi),Customer中維護(hù)著Order的一個(gè)集合,在Customer的構(gòu)造函數(shù)中給Order集合賦值。即,只要?jiǎng)?chuàng)建Customer實(shí)例,就會(huì)加載該Customer的所有Order。

關(guān)于Customer和Order類(lèi)。

    public class Customer
    {
        private List<Order> _orders = null;
        public List<Order> Orders
        {
            get { return _orders; }
        }
        private string _customerName;
        public string CustomerName
        {
            get { return _customerName; }
            set { CustomerName = value; }
        }
        public Customer()
        {
            _customerName = "darren";
            _orders = LoadOrders();
        }
        private List<Order> LoadOrders()
        {
            List<Order> result = new List<Order>();
            Order o = new Order();
            o.OrderNumber = "001";
            result.Add(o);
            o = new Order();
            o.OrderNumber = "002";
            result.Add(o);
            return result;
        }
    }
    public class Order
    {
        private string _orderNumber;
        public string OrderNumber
        {
            get { return _orderNumber; }
            set { _orderNumber = value; }
        }
    }

客戶(hù)端調(diào)用:

    class Program
    {
        static void Main(string[] args)
        {
            Customer customer = new Customer();
            Console.WriteLine(customer.CustomerName);
            foreach (var order in customer.Orders)
            {
                Console.WriteLine(order.OrderNumber);
            }
            Console.ReadKey();
        }
    }

把斷點(diǎn)打在foreach所在行,為customer變量添加監(jiān)視, 就發(fā)現(xiàn):在創(chuàng)建Customer實(shí)例的同時(shí),加載了該Customer的所有Order。     

Lazy<T>實(shí)現(xiàn)延遲加載

對(duì)于延遲加載,在這里,需求變成:在創(chuàng)建Customer實(shí)例的時(shí)候先不要加載該Customer的任何Order,等到遍歷、顯示Orders的時(shí)候再加載該Customer的所有的Order。

把Customer的_orders字段設(shè)置為驗(yàn)證加載。

private Lazy<List<Order>> _orders = null;

Customer的Orders屬性的get訪問(wèn)器中修改如下。

        public List<Order> Orders
        {
            get { return _orders.Value; }
        }

構(gòu)造函數(shù)中修改如下:

        public Customer()
        {
            _customerName = "darren";
            _orders = new Lazy<List<Order>>(() => LoadOrders());
        }

Customer類(lèi),修改后,完整如下:

    public class Customer
    {
        private Lazy<List<Order>> _orders = null;
        public List<Order> Orders
        {
            get { return _orders.Value; }
        }
        private string _customerName;
        public string CustomerName
        {
            get { return _customerName; }
            set { CustomerName = value; }
        }
        public Customer()
        {
            _customerName = "darren";
            _orders = new Lazy<List<Order>>(() => LoadOrders());
        }
        private List<Order> LoadOrders()
        {
            List<Order> result = new List<Order>();
            Order o = new Order();
            o.OrderNumber = "001";
            result.Add(o);
            o = new Order();
            o.OrderNumber = "002";
            result.Add(o);
            return result;
        }
    }

還是把斷點(diǎn)打在客戶(hù)端foreach代碼行,運(yùn)行。

可見(jiàn),在沒(méi)有遍歷之前,Customer的_orders字段的Value屬性值為null。

F11,進(jìn)入循環(huán)遍歷

可見(jiàn),當(dāng)進(jìn)入遍歷,獲取Customer實(shí)例的Order值的時(shí)候,延遲加載開(kāi)始,_orders字段的屬性值不再為null。

總結(jié):當(dāng)我們希望類(lèi)的某個(gè)屬性實(shí)現(xiàn)延遲加載,首先設(shè)計(jì)一個(gè)Lazy<T>類(lèi)型的字段,然后在該屬性的get訪問(wèn)器中,通過(guò)Lazy<T>類(lèi)型字段的Value屬性獲取值,最后在該類(lèi)構(gòu)造函數(shù)中實(shí)現(xiàn)針對(duì)Lazy<T>類(lèi)型字段的初始化。

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

  • C#難點(diǎn)逐個(gè)擊破(7):checked與unchecked

    C#難點(diǎn)逐個(gè)擊破(7):checked與unchecked

    checked 關(guān)鍵字用于對(duì)整型算術(shù)運(yùn)算和轉(zhuǎn)換顯式啟用溢出檢查。
    2010-02-02
  • C#實(shí)現(xiàn)Dev Grid拖拽移動(dòng)行的方法

    C#實(shí)現(xiàn)Dev Grid拖拽移動(dòng)行的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)Dev Grid拖拽移動(dòng)行的方法,可實(shí)現(xiàn)Dev Grid拖拽移動(dòng)行的效果,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-05-05
  • WPF自定義控件的實(shí)現(xiàn)

    WPF自定義控件的實(shí)現(xiàn)

    本文主要介紹了WPF自定義控件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 如何在Unity中檢測(cè)死循環(huán)和卡死

    如何在Unity中檢測(cè)死循環(huán)和卡死

    這篇文章主要介紹了在Unity中檢測(cè)死循環(huán)和卡死的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 關(guān)于C#基礎(chǔ)知識(shí)回顧--反射(三)

    關(guān)于C#基礎(chǔ)知識(shí)回顧--反射(三)

    在前面例子中,由于MyClass類(lèi)型的對(duì)象是顯示創(chuàng)建的,因此使用反射技術(shù)來(lái)調(diào)用MyClass上的方法沒(méi)有任何優(yōu)勢(shì)--以普通的方式調(diào)用對(duì)象上的方法會(huì)簡(jiǎn)單的多
    2013-07-07
  • Unity通過(guò)UGUI的Slider調(diào)整物體顏色

    Unity通過(guò)UGUI的Slider調(diào)整物體顏色

    這篇文章主要為大家詳細(xì)介紹了Unity通過(guò)UGUI的Slider調(diào)整物體顏色,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • C# 創(chuàng)建控制臺(tái)應(yīng)用程序

    C# 創(chuàng)建控制臺(tái)應(yīng)用程序

    這篇文章主要介紹了C# 創(chuàng)建控制臺(tái)應(yīng)用程序,在學(xué)習(xí)C#語(yǔ)言的時(shí)候,首先要學(xué)習(xí)控制臺(tái)的應(yīng)用程序,這樣才能專(zhuān)注于語(yǔ)言的學(xué)習(xí),減少學(xué)習(xí)的梯度,也有利于輸出自己需要輸出的內(nèi)容,一定要先使用控制臺(tái)的應(yīng)用程序的方式,下面就和小編一起學(xué)習(xí)該內(nèi)容吧
    2021-10-10
  • C# Word 類(lèi)庫(kù)的深入理解

    C# Word 類(lèi)庫(kù)的深入理解

    本篇文章是對(duì)C#中的Word類(lèi)庫(kù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 基于C#實(shí)現(xiàn)的多邊形沖突檢測(cè)實(shí)例

    基于C#實(shí)現(xiàn)的多邊形沖突檢測(cè)實(shí)例

    這篇文章主要給大家介紹了基于C#實(shí)現(xiàn)的多邊形沖突檢測(cè)的相關(guān)資料,文中介紹的方法并未使用第三方類(lèi)庫(kù),可以完美解決這個(gè)問(wèn)題,需要的朋友可以參考下
    2021-07-07
  • C#實(shí)現(xiàn)從網(wǎng)絡(luò)同步標(biāo)準(zhǔn)北京時(shí)間的方法

    C#實(shí)現(xiàn)從網(wǎng)絡(luò)同步標(biāo)準(zhǔn)北京時(shí)間的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)從網(wǎng)絡(luò)同步標(biāo)準(zhǔn)北京時(shí)間的方法,涉及C#操作時(shí)間的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03

最新評(píng)論

鹤峰县| 顺昌县| 云阳县| 伊金霍洛旗| 会宁县| 桐柏县| 温宿县| 广宗县| 泗水县| 衡山县| 武宣县| 镇坪县| 平山县| 瑞丽市| 青铜峡市| 阿拉善右旗| 莆田市| 乌兰浩特市| 凤城市| 公主岭市| 西青区| 苍溪县| 荣昌县| 翁牛特旗| 娱乐| 泾源县| 久治县| 名山县| 涿鹿县| 石嘴山市| 新密市| 蒲城县| 阿坝县| 衡水市| 永城市| 新竹市| 呼伦贝尔市| 西林县| 桦南县| 镇巴县| 屏南县|