.NET 4 中的延迟初始化

2024-03-31

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

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")
    );

为什么我要以这种方式创建一个对象?
实际上什么时候我们需要以这种方式创建对象?


目的Lazy.NET 4.0 中的一个功能是用属性替换许多开发人员以前使用的模式。 “旧”的方式就像

private MyClass _myProperty;

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

这边走,_myProperty仅在需要时才实例化一次。如果从不需要它,则永远不会实例化它。做同样的事情Lazy,你可能会写

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

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

当然,您不限于以这种方式做事Lazy,但目的是指定如何实例化一个值,而不是在需要时实际这样做。调用代码不必跟踪该值是否已实例化;相反,调用代码只使用Value财产。 (可以通过以下方式查明该值是否已实例化IsValueCreated财产。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET 4 中的延迟初始化 的相关文章

随机推荐