若要增强 .Net 应用程序的功能,请使用 class 暂停类的实例化,直到需要对象为止。Lazy<T>
开发人员通常会在应用程序启动或实例化类时立即实例化对象,而不管是否立即需要它们。
// Initializing expensive resources upfront
private readonly ExpensiveObject _expensiveObject = new ExpensiveObject();
public ExpensiveObject ExpensiveObject => _expensiveObject;
这可能会导致资源浪费和性能下降,尤其是在应用程序的生命周期中没有立即或从未使用的情况下。_expensiveObjectExpensiveObject
使用的语法如下:Lazy<T>
// Using Lazy<T> to initialize resources only when needed
private readonly Lazy<ExpensiveObject> _expensiveObject = new Lazy<ExpensiveObject>();
public ExpensiveObject ExpensiveObject => _expensiveObject.Value;
该方法转变为仅在需要时实例化对象。.Net 使使用语法实现起来更容易,而且也很安全。Lazy<T>
首先,让我们定义一个模拟延迟的类ExpensiveResource
using System;
using System.Threading;
class ExpensiveResource
{
public ExpensiveResource()
{
Console.WriteLine("Initializing expensive resource... This might take a while.");
// Simulating expensive initialization with a delay
Thread.Sleep(2000); // Delay for 2 seconds
Console.WriteLine("Expensive resource initialized!");
}
public void UseResource()
{
Console.WriteLine("Using the expensive resource.");
}
}
现在,让我们创建应用程序的主要部分,其中用于延迟初始化。Lazy<T>ExpensiveResource
using System;
class Program
{
private static Lazy<ExpensiveResource> _lazyExpensiveResource = new Lazy<ExpensiveResource>();
static void Main(string[] args)
{
Console.WriteLine("Application started.");
Console.WriteLine("Press any key to use the expensive resource...");
Console.ReadKey();
// Accessing the Value property of _lazyExpensiveResource for the first time triggers the initialization.
_lazyExpensiveResource.Value.UseResource();
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
源代码获取:公众号回复消息【code:86220
】