坚持对象创建

本文关键字:创建 对象 坚持 | 更新日期: 2023-09-27 18:11:30

是否存在这样一种情况:持有必要的数据来创建对象,并且只在绝对必要的时候创建它,比持有对象本身更好/更有效?

一个简单的例子:

class Bar
{
    public string Data { get; set; }
}
class Foo
{
    Bar bar;
    readonly string barData;
    public Foo(string barData)
    {
        this.barData = barData;
    }
    public void MaybeCreate(bool create)
    {
        if (create)
        {
            bar = new Bar { Data = barData };
        }
    }
    public Bar Bar { get { return bar; } }
}

坚持对象创建

如果对象执行一些复杂的构造操作,例如分配系统资源,则

是有意义的。

您有Lazy<T>来帮助您延迟对象的实例化。除此之外,它还内置了线程安全,如果您需要的话。

一般来说,没有。(如果我理解你的问题正确的话)。

分配/构造在性能方面是便宜的。除非你在做一些疯狂的事情,否则在设计感觉自然的时候构造你的对象——不要过早地优化。

是,如果创建对象意味着填充它,而填充它需要做一个缓慢的操作。

例如

List<int> ll = returnDataFromDBVeryVerySlowly();

Lazy<List<int>> ll = new Lazy<List<int>>(() =>
{
    return returnDataFromDBVeryVerySlowly();
});

在第一个示例中,即使您不需要returnDataFromDBVeryVerySlowly,也将始终调用它。在第二个例子中,只有在必要时才会调用它。这是非常常见的,例如,在ASP中。. NET的地方,你想有"准备好"许多"标准"的数据集,但你不希望他们被填充,除非他们需要,你想把他们作为你的页面的成员,以便多个方法可以访问他们(否则一个方法可以直接调用returnDataFromDBVeryVerySlowly)