今天就跟大家聊聊有关如何在C#项目中使用Lazy,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
创新互联是工信部颁发资质IDC服务器商,为用户提供优质的资阳移动机房服务使用 Lazy
你可以自己写一段逻辑来实现 延迟初始化,在 .Net Framework 4.0 之后就没必要了, 因为在 System 命名空间下已经提供了 Lazy
当使用 Lazy
Lazy> orders = new Lazy >(); IEnumerable result = lazyOrders.Value;
现在,考虑下面的两个类: Author 和 Blog,一个作者可以写很多文章,所以这两个类之间是 一对多 的关系,下面的代码片段展示了这种关系。
public class Author { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string Address { get; set; } public ListBlogs { get; set; } } public class Blog { public int Id { get; set; } public string Title { get; set; } public DateTime PublicationDate { get; set; } }
值得注意的是,关系型数据库中的 一对多 关系映射到对象模型就是 Author 类中增加一个 List Blogs 属性,使用这个属性,Author 就可以维持一个或者多个 Blog 实例对象,对吧。
现在假定在 用户界面 上仅需展示 Author 的基础信息,比如说:(firstname,lastname,address),在这种场景下,给 Author 对象加载 Blogs 集合是毫无意义的,当真的需要加载 Blogs 时,执行 Blogs.Value 即可立即执行,下面展示了 Lazy
public class Author { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string Address { get; set; } public Lazy> Blogs => new Lazy >(() => GetBlogDetailsForAuthor(this.Id)); private IList GetBlogDetailsForAuthor(int Id) { //Write code here to retrieve all blog details for an author. } }
接下来让我们看看如何使用泛型的 Lazy 实现单例模式,下面的 StateManager 是线程安全的,同时为了演示 延迟初始化,我使用了 静态构造函数 来确保 C# 编译器不会将它标记为 beforefieldinit。
public sealed class StateManager { private StateManager() { } public static StateManager Instance { get { return Nested.obj; } } private class Nested { static Nested() { } internal static readonly StateManager obj = new StateManager(); } }
下面我用 Lazy
public class StateManager { private static readonly Lazyobj = new Lazy (() => new StateManager()); private StateManager() { } public static StateManager Instance { get { return obj.Value; } } }
可以瞄一下上面代码的 Instance 属性,它被做成只读属性了,同时也要注意 obj.Value 也是一个只读属性。
public class Lazy{ public T Value { get { if (_state != null) { return CreateValue(); } return _value; } } }
看完上述内容,你们对如何在C#项目中使用Lazy有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。