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

1 comment:

  1. My Nes Roms Download has been really successful in the development and peacefully passing all the tests and in the development time of the latest version been put up to testing.

    ReplyDelete