坚持对象创建
本文关键字:创建 对象 坚持 | 更新日期: 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
)