The Singleton pattern is used when you need one, and only one instance of your class. Sometimes you see this pattern used in cases where the construction of a class is expensive (like a file stream). It can be lazy loaded (at runtime instead of compiletime) and must be thread-safe. The class gets a public method or property named Instance, responsible for creating the Singleton. The constructor of the Singleton class is private, so no one can construct a new instance from the class by applying ‘new’.
using System;
namespace Singleton
{
class Program
{
static void Main(string[] args)
{
// Lazy loaded object
// Singleton gets created on first call
Singleton.Instance.SomeProperty = 0;
Singleton.Instance.SomeMethod();
}
}
public class Singleton
{
// Private constructor to prevent 'new'
private Singleton()
{
}
// The instance read only property
public static Singleton Instance
{
get
{
return Nested.instance;
}
}
// Nested class with the actual Singleton object
private class Nested
{
internal static readonly Singleton instance =
new Singleton();
static Nested()
{
}
}
// Additional methods and propeties
public int SomeProperty { get; set; }
public void SomeMethod() { }
}
}