Dinge die ich irgendwo dokumentieren möchte

Autor: admin

Singleton Pattern

Wie kann man in C# ein Singleton implementieren?
Der klassische Weg wär in etwa so, dass man ein public static field Instance hat.

Das sähe ungefähr so aus:

namespace SingletonPattern
{
  public class KlassicherSingleton
  {
    private static KlassicherSingleton instance;

    private KlassicherSingleton()
    {
    }

    public static KlassicherSingleton Instance
    {
      get
      {
        if (instance == null)
        { instance = new KlassicherSingleton(); }

        return instance;
      }
    }
  }
}

Nachteil dieser Methode ist vor allem, dass sie nicht Thread-Safe ist. Mehrere Prozessen könnten konkurrierend sich um diese Instanz kloppen. Was am Ende raus kommt ist entweder der Weltuntergang, ein seltsamen Verhalten der Anwendung, oder sogar der Absturz ins tiefe nichts.

Man könnte nun hergehen und das Ganze mit Locks irgendwie Threadsafe basteln, aber der Entwickler ist zu faul dafür. Microsoft-Entwicklern geht es da nicht anders, also wurde das Lazy-Pattern erschaffen. Die Anwendung ist super simple:

using System;

namespace SingletonPattern
{
  public class LazySingleton
  {
    private static Lazy<LazySingleton> instance = new Lazy<LazySingleton>(() => new LazySingleton());

    /// <summary>
    /// Single-Instance des CalloutEventAggregators
    /// </summary>
    public static LazySingleton Instance
    {
      get
      {
        return instance.Value;
      }
    }
  }
}

Vorteil: Thread safe. Und weniger zu schreiben. WinWin für alle. Außer dem, der das Lazy schreiben musste. Aber der bekommt dafür vielleicht ja einen Kuchen.

Hello world!

Erster Eintrag von WordPress generiert – lassen wir ihn mal da.
Die Idee dieses Blog’s ist es, Dinge zu dokumentieren, die mir so widerfahren.
Als Programmierer hat man immer mal Dinge, die man ab und an mal macht, dann rücken sie in Vergessenheit. Kommt es eines schicksalhaften Tages dazu, dass man sich erinnern muss, wie das nochmal ging, ist das Wissen weg und man fängt von vorne an.

© 2025 der Blog von Shusi

Theme von Anders NorénHoch ↑