Static and Singleton are very different in their usage and implementation. So we need to wisely choose either of these two in our projects.
Singleton is a design pattern that makes sure that your application creates only one instance of the class anytime. It is highly efficient and very graceful. Singletons have a static property that you must access to get the object reference.
However, singleton is not the golden rule, there are several cases where a static class is more appropriate.. for example when you want to write extension methods etc…
Below is a simple thread-safe singleton in C#:
public sealed partial class Singleton { private static volatile Singleton instance; private static object syncRoot = new Object(); private Singleton() { } public static Singleton Instance { get { if (instance == null) { lock (syncRoot) { if (instance == null) instance = new Singleton(); } } return instance; } } }