Friday, April 26, 2013

Implementing Singleton using Static Constructor

There is another way to implement Singleton design pattern by using static constructor. Static constructors in C# are specified to execute only when an instance of the class is created or a static member is referenced, and to execute only once per AppDomain.
This is a thread-safe implementation and there are other ways to implement Singleton but this for seems to crater most of my requirement. It is highly unlikely that I needed a static variable in the singleton.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace StaticConstructorExp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Main First Call");
            Console.WriteLine(SingletonTest.Instance.abc);
            Console.ReadLine();
        }
    }
    class SingletonTest
    {
        public String abc;
        private static readonly SingletonTest _obj = new SingletonTest();
        static SingletonTest()
        {
            _obj.abc = "test test";
            Console.WriteLine("static constructor called");
        }
        private SingletonTest()
        {
        }
        public static SingletonTest Instance
        {
            get { return _obj; }
        }
    }
}

Output

Main First Call                                             
static constructor called                                   
test test                                                   

Reference: 
http://csharpindepth.com/Articles/General/Singleton.aspx

No comments:

Post a Comment