I don't know how many times I have implemented the Singleton Design Pattern in C#, but it was starting to get old...
So I Googled the net, looking for something I could re-use. I found this excellent article, and adapted it to use Generics. This is what I came up with:
using System; namespace TT { #region Singleton<T> /// <summary> /// Provides a Singleton implementation using Generics. /// </summary> /// <typeparam name="T">Type of singleton instance</typeparam> public sealed class Singleton<T> where T : new() { Singleton() {} public static T Instance { get { return Nested.instance; } } class Nested { // Explicit static constructor to tell C# compiler // not to mark type as beforefieldinit static Nested() {} internal static readonly T instance = new T(); } } #endregion }
You can easily use this class to create a Singleton for any type you want, all it has to do is have a default parameterless constructor. For instance:
Singleton<StoryBoardManager>.Instance.Stop();
Pretty neat, huh?
Copyright © 2003-2010 Falafel Software Inc.
The opinions expressed herein are Falafel's employees own personal opinions and do not represent Falafel Software's view in any way in case they go bananas!