Quali sono i vantaggi di Lazy offerta su standard di esemplificazione pigro?
-
25-10-2019 - |
Domanda
Considerate questo esempio, mostra due possibili modalità di inizializzazione ritardata.
Tranne che per essere thread-safe, ci sono advantates specifiche di utilizzo Pigro
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; }
}
}
UPDATE:
Si prega di considerare al di sopra di codice come un semplice esempio, i tipi di dati sono irrilevanti, il punto qui è quello di confrontare Pigro
Soluzione
E 'semanticamente più corretto.
Quando si utilizza il Nullable<decimal>
, quello che dici è che il valore di null
starà per lo stato "non valutata". Anche se questo è un comune di conversione, è ancora arbitrario. Ci sono milioni di altri modi di interpretare null
, quindi probabilmente si dovrebbe spiegare da qualche parte (nella documentazione o almeno come commento) cosa significa nulli in questo caso.
Al contrario, quando si utilizzano Lazy<decimal>
, le vostre intenzioni sono chiare.