对于使用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; }
}
}