.NET 4中的延迟初始化

Mou*_*Mou 26 c# .net-4.0 c#-4.0

什么是延迟初始化.这是我搜索谷歌后得到的代码.

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")
    );
Run Code Online (Sandbox Code Playgroud)

我为什么要以这种方式创建对象....实际上我们需要以这种方式创建对象......寻找答案.

And*_*rew 61

Lazy.NET 4.0 中的功能的目的是替换许多开发人员以前使用属性的模式."老"的方式就像是

private MyClass _myProperty;

public MyClass MyProperty
{
    get
    {
        if (_myProperty == null)
        {
            _myProperty = new MyClass();
        }
        return _myProperty;
    }
}
Run Code Online (Sandbox Code Playgroud)

这样,_myProperty只有在需要时才会实例化一次.如果它永远不需要,它永远不会被实例化.要做同样的事情Lazy,你可以写

private Lazy<MyClass> _myProperty = new Lazy<MyClass>( () => new MyClass());

public MyClass MyProperty
{
    get
    {
        return _myProperty.Value;
    }
}
Run Code Online (Sandbox Code Playgroud)

当然,您不限于以这种方式执行操作Lazy,但目的是指定如何在不需要实际实现值的情况下直到需要它为止.调用代码不必跟踪值是否已被实例化; 相反,调用代码只使用该Value属性.(可以找出该值是否已使用该IsValueCreated属性进行实例化.)

  • "Lazy"的另一个巨大优势是它的默认重载是**线程安全**,也就是说,如果你的对象的多个使用者在没有设置的情况下尝试同时检索它的值,那么你在延迟初始化函数中提供的代码*只会执行一次.* (12认同)

asa*_*yer 9

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

使用Lazy实例来推迟创建大型或资源密集型对象或执行资源密集型任务,尤其是在程序生命周期内可能不会发生此类创建或执行时.

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


Pra*_*ana 8

在这里查看msdn文档:延迟初始化

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