En .NET 4, el siguiente fragmento con una propiedad en caché también se puede escribir utilizando la clase System.Lazy<T>
. Medí el rendimiento de ambos enfoques y es prácticamente lo mismo. ¿Hay algún beneficio real o mágico de por qué debería usar uno sobre el otro?Propiedad en caché vs Lazy <T>
caché de la propiedad
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;
}
}
}
Lazy <T>
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; }
}
}
Mediante el uso de '' Lazy que estás siendo 'Lazy' para escribir su propia implementación. (En el buen sentido, por supuesto.) –
BoltClock
Interesante, me inclinaría a decir que es menos código y más legible, pero su ejemplo demuestra que esto no es exactamente así. Pero, de nuevo, ya tengo una clase 'Propiedad' para los campos de respaldo que admite este y el comportamiento más común del campo de respaldo. –
Lazy permite hilo de seguridad –
Tsayper