-1, альтернатива OP идентична в том смысле, что если свойство никогда не вызывается, то список никогда не создается. В этом смысле они оба "ленивы".
T 4 следующий фрагмент с кэшированным свойством также может быть написан с использованиемSystem.Lazy<T>
класс. Я измерил производительность обоих подходов, и она почти одинакова. Есть ли какая-то реальная польза или магия, почему я должен использовать один над другим?
Кэшированное свойство
public static class Brushes
{
private static LinearGradientBrush _myBrush;
public static LinearGradientBrush MyBrush
{
get
{
if (_myBrush == null)
{
var linearGradientBrush = new LinearGradientBrush { ...};
linearGradientBrush.GradientStops.Add( ... );
linearGradientBrush.GradientStops.Add( ... );
_myBrush = linearGradientBrush;
}
return _myBrush;
}
}
}
Ленивый <Т>
public static class Brushes
{
private static readonly Lazy<LinearGradientBrush> _myBrush =
new Lazy<LinearGradientBrush>(() =>
{
var linearGradientBrush = new LinearGradientBrush { ...};
linearGradientBrush.GradientStops.Add( ... );
linearGradientBrush.GradientStops.Add( ... );
return linearGradientBrush;
}
);
public static LinearGradientBrush MyBrush
{
get { return _myBrush.Value; }
}
}