首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >.NET 4中的延迟初始化

.NET 4中的延迟初始化
EN

Stack Overflow用户
提问于 2011-06-21 20:21:24
回答 3查看 22.7K关注 0票数 32

什么是懒惰初始化。这是我在谷歌搜索后得到的代码。

代码语言:javascript
复制
class MessageClass
{
    public string Message { get; set; }

    public MessageClass(string message)
    {
        this.Message = message;
        Console.WriteLine("  ***  MessageClass constructed [{0}]", message);
    }
}

Lazy<MessageClass> someInstance = new Lazy<MessageClass>(
    () => new MessageClass("The message")
    );

为什么我要在这个way....when中创建对象实际上我们需要在这个way......looking中创建对象来回答。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-21 20:32:35

.NET 4.0中的Lazy特性的目的是用属性替换许多开发人员以前使用的模式。“老”的方式是这样的:

代码语言:javascript
复制
private MyClass _myProperty;

public MyClass MyProperty
{
    get
    {
        if (_myProperty == null)
        {
            _myProperty = new MyClass();
        }
        return _myProperty;
    }
}

这样,_myProperty只会实例化一次,而且只在需要时实例化。如果从来不需要它,就永远不会实例化它。要对Lazy执行相同的操作,您可以这样写

代码语言:javascript
复制
private Lazy<MyClass> _myProperty = new Lazy<MyClass>( () => new MyClass());

public MyClass MyProperty
{
    get
    {
        return _myProperty.Value;
    }
}

当然,您并不局限于使用Lazy以这种方式进行操作,而是指定如何实例化一个值,直到需要它时才进行实例化。调用代码不必跟踪该值是否已实例化;相反,调用代码只使用Value属性。(可以确定该值是否已使用IsValueCreated属性实例化。)

票数 67
EN

Stack Overflow用户

发布于 2011-06-21 20:24:24

“第一次访问Lazy.Value属性或调用Lazy.ToString方法时,会发生延迟初始化。

使用Lazy的实例可以延迟创建大型或资源密集型对象或执行资源密集型任务,特别是当此类创建或执行可能不会在程序的生命周期内发生时。“

http://msdn.microsoft.com/en-us/library/dd642331.aspx

票数 10
EN

Stack Overflow用户

发布于 2011-06-21 20:23:54

点击这里查看msdn文档:Lazy Initialization

对象的延迟初始化意味着它的创建被推迟到第一次使用它。延迟初始化主要用于提高性能,避免浪费计算,并减少程序内存需求。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6425133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档