Feedback

C# - Singelton in C# - threadsicher implementiert

Veröffentlicht von am 20.01.2009
(3 Bewertungen)
Das Singelton-Pattern ist wohl eins der einfachsten und praxisrelevantesten Designpatterns.

Hier also einmal eine beispielhafte Implementierung in C#
GFU-Schulungen  [Anzeige]

VB.NET Komplett

Sie stehen vo der Aufgabe, individuelle Anwendungen für Windows zu schreiben. Hier ist VB.NET die optimale Sprache. Sie erlernt sich recht leicht und passt sich komplett in die .NET Umgebung von Microsoft ein. Nach der Schulung entwickeln Sie anwenderfreundliche Programme in VB.NET . Mit den objektorientierten Modellen in VB.NET erzeugen Sie außerdem wiederverwendbare Komponenten.

VB.NET Aufbau

Sie verfügen nach der Schulung über fundierte Kenntnisse in der Arbeit mit objektorientierten Modellen in VB.NET und können wiederverwendbare Komponenten eigenständig erzeugen.

public class Singelton
    {
        private static Singelton me = null;
        static readonly object padlock0 = new object(); //Zur Threadsicherheit

        private Singelton()
        {
            //Initialize
        }

        public static Singelton GetInstance()
        {
            lock (padlock0)
            {
                if(me == null) 
                {
                    me = new Singelton();
                }
                return me;
            }
        }
    }
Abgelegt unter Singelton, Pattern, Designpattern.

2 Kommentare zum Snippet

Michael Hachen schrieb am 08.05.2009:
Warum so umständlich?
public static readonly Singleton Instance = new Singleton();
Keks1911 schrieb am 17.06.2010:
Sorry, Michael, das ist Quatsch. Der Punkt ist ja, dass das Singleton threadsicher sein soll.

OP:
1. Das Teil heißt Singleton.
2. Du hast folgendes vergessen zu erwähnen:
2a. Diese Klasse darf kein einziges public-Member haben.
2b. Jede public Methode - auch static, sofern sie auf die Instanz zugreifen - dieser Klasse muss am padlock0 synchronisiert werden, weil sonst die Aufrufe nicht atomar sind.
 

Logge dich ein, um hier zu kommentieren!