What's a good threadsafe singleton generic template pattern in C#

c#, design-patterns

Solution

According to Jon Skeet in Implementing the Singleton Pattern in C# the code you posted is actually considered as bad code, because it appears broken when checked against the ECMA CLI standard.

Also watch out: everytime you instantiate your object with a new type of T, it becomes another instance; it doesn't get reflected in your original singleton.

Problem

I have the following C# singleton pattern, is there any way of improving it? ``` public class Singleton<T> where T : class, new() { private static object _syncobj = new object(); private static volatile T _instance = null; public static T Instance { get { if (_instance == null) { lock (_syncobj) { if (_instance == null) { _instance = new T(); } } } return _instance; } } public Singleton() { } } ``` Preferred usage example: ``` class Foo : Singleton<Foo> { } ``` Related: An obvious singleton implementation for .NET?

Original source

Related problems