Singleton in C# – Threadsafe

Singleton – Threadsafe

    public sealed class Singleton
    {
        Singleton()
        {
        }

        public static Singleton 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 Singleton instance = new Singleton();
        }
    }

Der Compiler kennzeichnet jeden Typ – der nicht über einen statischen Konstruktor verfügt – mit dem internen Flag „beforefieldinit“. Dieses Flag bewirkt, dass der Typ irgendwann vor, spätestens aber beim ersten Zugriff initialisiert wird.

Eine andere Nutzung dieses ‚Features‘ ist es, große Resourcen erst zu laden oder zu erzeugen, wenn sie das erste mal benötigt werden.

Singleton „Generic“ – Threadsafe

    public class Singleton<T> where T : class, new()
    {
        Singleton()
        {
        }

        public static T Instance
        {
            get
            {
                return Nested.instance;
            }
        }

        class Nested
        {
            static Nested()
            {
            }

            internal static readonly T instance = new T();
        }
    }

 

Schreibe einen Kommentar