gpt4 book ai didi

c# - .NET 4 中的延迟初始化

转载 作者:IT王子 更新时间:2023-10-29 04:17:32 24 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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 属性实例化。)

关于c# - .NET 4 中的延迟初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6425133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com