If you just think, you have discovered all the exciting new features in .NET 4.0, you always find some new bits of nice functionality.
Lazy<T> is one of those features.
It brings lazy loading to the core of the .NET framework. Suppose that you have an object that is very expensive to create and use. You don’t want to create it everytime your application runs. You only want to create it when you need it. Lazy<T> makes this easy. You just create a lazy wrapper on the expensive object:
1: Lazy<ExpensiveResource> ownedResource = new Lazy<ExpensiveResource>();
To get the expensive object just use the ownedResource.Value property. The first time you access ownedResource.Value, the expensive resource will get allocated, but not before.
And the API designers did a really good job and added two very useful constructions:
First, Lazy<T> has an overloaded constructor that allows you to specify a Func<T>. This makes it possible to use a factory method to construct your object. No new() constraint that limits the usability of this class.
1: public Lazy(Func<T> valueFactory)
Second, there are two other constructors in Lazy<T>:
1: public Lazy(LazyExecutionMode mode);
2: public Lazy(Func<T> valueFactory, LazyExecutionMode mode);
These two constructors indicate that you are running in a multi-threaded environment, and the lazy construction of the owned object must be synchronized. So you are assured that only one thread will actually create the object.
It makes me wonder what other things are out there in the .NET 4.0 Framework...