In .NET 4 the following snippet with a cached property can also be written using the System.Lazy
Lazy has some syncronization overhead to provide thread-safety whereas cached property is initiliazed by CLR way before any other code and you do not need to pay synronization cost
From a testability point of view, Lazy is well tested and proven artifact.
However, it has a very slight overhead, in my opinion, over other option