在 .NET 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;
}
}
}
懒惰的<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; }
}
}
Lazy<T>
可以懒惰地不编写自己的实现。(当然,这是一种好方式。) - BoltClockProperty<T>
类。 - Steven Jeuris