2017-02-15 2 views
-2

ich über Singleton-Entwurfsmuster zu lesen, wenn ich über diese Umsetzung kommen:Singleton: create Instanz innerhalb statischen Konstruktor

public class Singleton 
{ 
    private static Singleton Instance { get; private set; } 

    private Singleton() 
    { 
    } 

    static Singleton() 
    { 
     Instance = new Singleton(); 
    } 
} 

Ist die Singletons Thread-sicher? Was sind die Vor- und Nachteile einer solchen Implementierung?

+0

Zur Diskussion der Vor/Nachteile zu lesen (das ist meist Wegthema auf Stack-Überlauf), siehe z.B. http://csharpindepth.com/Articles/General/Singleton.aspx –

+0

Ich habe diesen Artikel gesehen, aber das obige Beispiel wurde nicht erwähnt – Mhd

+0

Ihr Beispiel ist funktionell identisch mit einfach das Backing-Feld direkt zu initialisieren, z. 'statische Singleton-Instanz {get; } = new Singleton(); ', eine Variation, die in diesem Artikel diskutiert wird. Natürlich ist der von Ihnen gepostete Code nutzlos, da die 'Instance'-Eigenschaft 'private' ist und daher nur von der' Singleton'-Klasse selbst aufgerufen werden kann (die keine Beschränkungen dafür hat, wie viele Instanzen von' Singleton' erzeugt werden können) ... Singletons sind wirklich nur nützliche Konstrukte für externen Code). –

Antwort

0

keine Singletons sind nicht Thread-sicher, würde ich empfehlen https://msdn.microsoft.com/en-us/library/ff650316.aspx

+0

Der Singleton _initialisierung_ das OP fragt nach _is_ Thread-sicher. Ob das Singleton-Objekt selbst Thread-sicher ist, ist natürlich eine völlig getrennte Sache. Es wäre jedoch sehr schlecht, ein Singleton-Objekt zu schreiben, das in einem Kontext, in dem die Thread-Sicherheit in irgendeiner Weise problematisch ist, nicht Thread-sicher ist, da ein Singleton wiederholt und möglicherweise gleichzeitig verwendet wird. –

Verwandte Themen