Contributors: 9 Sunday, February 26, 2017
Licensed under: CC-BY-SA
Not affiliated with Stack Overflow
Rip Tutorial:
Roadmap: roadmap

Lazy, thread-safe Singleton (using Lazy<T>)

Download c# eBook


.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;

Live Demo on .NET Fiddle