C # - Singleton-Muster

7

Wie Sie von meinem Spitznamen sehen können, bin ich Anfänger, der wirklich über Singleton Muster lernt, wo ich ein Problem habe. Bevor ich gelernt habe, dass statische Konstruktoren immer vor den Standardkonstruktoren ausgeführt werden, aber in diesem Code ist das Ergebnis anders, zuerst sehe ich die "Insta" Zeichenfolge dann die "Static", warum passiert das?

%Vor%     
CSharpBeginner 03.07.2013, 20:43
quelle

3 Antworten

13

Wenn Sie schreiben

%Vor%

Sie würden sehen, was Sie erwarten

static ctor wird wie erwartet zuerst ausgeführt, aber Sie drucken nach auf der Konsole instance = new Singleton(); line, aber diese Zeile execute instance ctor, also "inst".

Also Ausführungsfluss:

  • statischer ctor
    • %Code%
      • instance ctor druckt "insta"
    • "statisch"
Tigran 03.07.2013, 20:45
quelle
9

Siehe das MSDN-Muster hier , um eine Erklärung für das Singleton-Muster zu erhalten.

>

MSDN empfiehlt, dass Sie es wie folgt schreiben sollten, damit es threadsicher ist:

%Vor%

Übrigens hat dieses Muster den folgenden Vorteil gegenüber dem statischen Konstruktor:

Die Instanziierung wird nicht ausgeführt, bis ein Objekt nach einer Instanz fragt; Dieser Ansatz wird als faule Instanziierung bezeichnet. Lazy Instanziierung vermeidet die Instanziierung unnötiger Singletons beim Start der Anwendung.

Sehen Sie, ob dies Ihren Anforderungen entspricht, und wenn dies der Fall ist, implementieren Sie diese Lösung.

    
saamorim 03.07.2013 20:48
quelle
1

Die statische Methode wird zuerst aufgerufen. Hier ist der Beweis - ändern Sie Ihren Code wie folgt:

%Vor%     
Iucounu 03.07.2013 20:53
quelle

Tags und Links