c# - Lazy<T> 延迟初始化对象

对于使用Lazy<T>包装的对象来讲,就一个作用,即在被调用的时候才初始化。

具体什么情况下可以使用,什么情况下最好不要用,请小伙伴们开动自己的脑筋;以下示例仅演示Lazy<T>的功能。

namespace LazyTest
{
    using System;

    /// <summary>
    /// https://msdn.microsoft.com/en-us/library/dd642331(v=vs.110).aspx
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            // 普通对象
            Item item = new Item();
            Console.WriteLine(item.LargeObj.Length);

            // Lazy对象
            LazyItem lazyItem = new LazyItem();
            Console.WriteLine("调用之前-> LargeObj:" + lazyItem.LargeObj.Value);
            Console.WriteLine("调用..");
            lazyItem.GetLength();
            Console.WriteLine("调用之后-> LargeObj:" + lazyItem.LargeObj.Value);
            Console.ReadLine();
        }
    }

    public class Item 
    {
        public Item() 
        {
            // 马上创建LargeObj
            LargeObj =  new byte[10000];
        }

        public long GetLength() 
        {
            return LargeObj == null ? 0 : LargeObj.Length;
        }

        public byte[] LargeObj { get; set; }
    }

    public class LazyItem
    {
        public LazyItem()
        {
            // 不会马上创建LargeObj, 在调用LargeObj的地方才创建对象
            LargeObj = new Lazy<byte[]>(() => { return new byte[10000]; });
        }

        public long GetLength()
        {
            // 此处调用LargeObj
            return LargeObj == null ? 0 : LargeObj.Value.Length;
        }

        public Lazy<byte[]> LargeObj { get; set; }
    }
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值