.NET C#基础教程第15天:延迟初始化

作者:微信公众号:【架构师老卢】
6-10 8:58
115

介绍

若要增强 .Net 应用程序的功能,请使用 class 暂停类的实例化,直到需要对象为止。Lazy<T>

学习目标

  • 开发人员的常见错误
  • 如何使用类Lazy<T>

开发人员的先决条件

  • 对 C# 语言有基本的了解。

开始

开发人员常见错误

开发人员通常会在应用程序启动或实例化类时立即实例化对象,而不管是否立即需要它们。

// 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();
    }
}

使用的好处Lazy<T>

  • 提高性能
  • 螺纹安全

源代码获取:公众号回复消息【code:86220

相关代码下载地址
重要提示!:取消关注公众号后将无法再启用回复功能,不支持解封!
第一步:微信扫码关键公众号“架构师老卢”
第二步:在公众号聊天框发送code:86220,如:code:86220 获取下载地址
第三步:恭喜你,快去下载你想要的资源吧
相关留言评论
昵称:
邮箱:
阅读排行