下面是关于如何使用C#中的Lazy的完整攻略。
什么是Lazy
Lazy
是 .NET 中提供的一种延迟初始化的机制。它可以推迟对象的创建和初始化,直到第一次访问此对象。
如何使用Lazy
创建Lazy对象
使用 Lazy
首先需要创建一个 Lazy<T>
对象,这里的 T
代表延迟初始化对象的类型。同时需要为 Lazy
提供一个工厂方法用于创建此类型的对象。
Lazy<string> lazyString = new Lazy<string>(() => "Hello, World!");
以上代码就创建了一个 Lazy<string>
对象 lazyString
,它将由一个 lambda 表达式(() => "Hello, World!"
)来创建其所持有的字符串对象。
访问Lazy对象
访问 Lazy
对象时,它将应用其工厂方法来创建并初始化对象,然后将此对象返回给你。
string str = lazyString.Value; // "Hello, World!"
通过 lazyString.Value
获取到 lazyString
对象所持有的字符串对象。
示例
示例1
下面的示例显示了懒惰地填充一个包含十万个元素的大数组。
using System;
public class Program
{
private static Lazy<int[]> _bigArray =
new Lazy<int[]>(() =>
{
Console.WriteLine("Initializing big array");
int[] array = new int[100000];
for (int i = 0; i < 100000; ++i)
{
array[i] = i;
}
return array;
});
static void Main(string[] args)
{
Console.WriteLine("Press any key to initialize a big array...");
Console.ReadKey();
int[] array = _bigArray.Value; // 它将应用其工厂方法来创建并初始化对象
Console.WriteLine($"Array length: {array.Length}");
}
}
示例2
下面的示例演示了创建一个线程安全的 Lazy<T>
对象。
using System;
using System.Threading;
public class Program
{
private static Lazy<Random> _random =
new Lazy<Random>(() => new Random(), LazyThreadSafetyMode.ExecutionAndPublication);
static void Main(string[] args)
{
Console.WriteLine("Press any key to generate two random numbers...");
Console.ReadKey();
int num1 = _random.Value.Next(); // 获取Random所产生的随机数
int num2 = _random.Value.Next();
Console.WriteLine($"Random values: {num1}, {num2}");
}
}
在此示例中,我们每次生成两个随机数,而且 Random
只会被初始化一次,这是因为我们使用了 LazyThreadSafetyMode.ExecutionAndPublication
。这意味着当工厂方法调用完成并返回对象时,这个对象会和 Lazy
实例本身分配内存的一部分一起被发布到所有线程上,从而使 Lazy
实例变为线程安全。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何使用C#中的Lazy的使用方法 - Python技术站