Welche Vorteile bietet Lazy über Standard -faule Instanziierung?
-
25-10-2019 - |
Frage
Betrachten Sie dieses Beispiel, es zeigt zwei mögliche Möglichkeiten der faulen Initialisierung. Gibt es nur bestimmte Vorteile, wenn er thread-sicher ist, faul zu verwendenu003CT> hier?
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; }
}
}
AKTUALISIEREN:
Bitte betrachten Sie den obigen Code als einfaches Beispiel: Datentypen sind irrelevant. Hier geht es darum, Lazy zu vergleichenu003CT> über Standard -Lazy -Initialisierung.
Lösung
Es ist semantisch korrekter.
Wenn Sie das verwenden Nullable<decimal>
, was Sie sagen, ist, dass der Wert von null
wird für den "unegelegenen" Staat stehen. Obwohl dies eine häufige Konvertierung ist, ist es immer noch willkürlich. Es gibt Millionen andere Möglichkeiten zu interpretieren null
, Sie sollten also wahrscheinlich irgendwo irgendwo (in der Dokumentation oder zumindest als Kommentar) erklären, was Null in diesem Fall bedeutet.
Im Gegenteil, wenn Sie verwenden Lazy<decimal>
, Ihre Absichten sind klar.