¿Qué ventajas ofrece elzy sobre la instanciación perezosa estándar?
-
25-10-2019 - |
Pregunta
Considere este ejemplo, muestra dos posibles formas de inicialización perezosa. Excepto por ser seguro de hilo, ¿hay ventajas específicas de usar lazyu003CT> ¿aquí?
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; }
}
}
ACTUALIZAR:
Considere el código anterior como un ejemplo simple, los tipos de datos son irrelevantes, el punto aquí es comparar perezosou003CT> sobre inicialización perezosa estándar.
Solución
Es semánticamente más correcto.
Cuando usas el Nullable<decimal>
, lo que dices es que el valor de null
defenderá el estado "no evaluado". Aunque esta es una conversión común, sigue siendo arbitraria. Hay millones de otras formas de interpretar null
, por lo que probablemente debería explicar en algún lugar (en la documentación o al menos como comentario) qué significa NULL en este caso.
Por el contrario, cuando usas Lazy<decimal>
, tus intenciones son claras.