考虑这个例子,它展示了两种可能的延迟初始化方式。除了线程安全之外,在这里使用 Lazy<T> 是否有任何特定的优势?
class Customer {
private decimal? _balance2;
private static decimal GetBalanceOverNetwork() {
//lengthy network operations
Thread.Sleep(2000);
return 99.9M;
}
public decimal? GetBalance2Lazily() {
return _balance2 ?? (_balance2 = GetBalanceOverNetwork());
}
private readonly Lazy<decimal> _balance1 = new Lazy<decimal>(GetBalanceOverNetwork);
public Lazy<decimal> Balance1 {
get { return _balance1; }
}
}
更新:
请把上面的代码当作一个简单的例子,数据类型无关紧要,这里的重点是比较惰性 <T> 和标准惰性初始化。