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

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

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

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

即時加載

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

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

    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; }
        }
    }

客戶端調(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í)例的同時,加載了該Customer的所有Order。     

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

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

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

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

Customer的Orders屬性的get訪問器中修改如下。

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

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

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

Customer類,修改后,完整如下:

    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)打在客戶端foreach代碼行,運(yùn)行。

可見,在沒有遍歷之前,Customer的_orders字段的Value屬性值為null。

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

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    C# Word 類庫的深入理解

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

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

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

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

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

最新評論

乐昌市| 万盛区| 长沙县| 墨脱县| 铜川市| 杭锦后旗| 普安县| 卢湾区| 通城县| 双江| 乐都县| 茶陵县| 平舆县| 锡林郭勒盟| 万载县| 通化县| 顺平县| 临汾市| 荔浦县| 南开区| 博白县| 大安市| 雷波县| 织金县| 平果县| 五河县| 株洲市| 阆中市| 法库县| 长寿区| 神池县| 广丰县| 乌鲁木齐县| 宝兴县| 波密县| 溧水县| 广平县| 婺源县| 玉田县| 万安县| 虞城县|