.Net 4.0 type Lazy guarantees thread-safe object initialization, so this type could be used to make Singletons.
public class LazySingleton
{
private static readonly Lazy<LazySingleton> _instance =
new Lazy<LazySingleton>(() => new LazySingleton());
public static LazySingleton Instance
{
get { return _instance.Value; }
}
private LazySingleton() { }
}
Using Lazy<T>
will make sure that the object is only instantiated when it is used somewhere in the calling code.
A simple usage will be like:
using System;
public class Program
{
public static void Main()
{
var instance = LazySingleton.Instance;
}
}