Ich war gestern in einem Interview und eine der Fragen war, was ist ein Singleton und wie implementieren Sie es.Gibt es einen Grund, eine statische Klasse nur mit statischen Elementen zu verwenden, anstatt sie statisch zu machen?
Lösung # 1 von MSDN:
using System;
public class Singleton
{
private static Singleton instance;
private Singleton() {}
public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}
ich die einfachste Lösung (Lösung Nummer 1 von Msdn Implementierung) gab, während er den Thread-sicher eine (Lösung Nummer 3) gesucht.
Lösung # 3 von MSDN:
using System;
public sealed class Singleton
{
private static volatile Singleton instance;
private static object syncRoot = new Object();
private Singleton() {}
public static Singleton Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
instance = new Singleton();
}
}
return instance;
}
}
}
Was ich ist faszinierend ist das privaten Konstruktor in Msdn Vorbild. Ich wusste nicht, dass so etwas existiert.
einen Blick auf msdn on it
public class Counter
{
private Counter() { }
public static int currentCount;
public static int IncrementCount()
{
return ++currentCount;
}
}
Taking frage ich dann:
Warum würden Sie eine Klasse, die nur statische Mitglieder hat und damit möchte Instanzen davon verhindern erstellt werden und somit die Nutzung für einen privaten Konstruktor - anstatt die Klasse statisch zu machen?!
PS. Die Frage ist nicht über Singletons - geht es um ein Szenario zu beschreiben, wo ich wählen würde eine instantiable Klasse zu erstellen, die nur statische Mitglieder hat (und damit letztendlich die Notwendigkeit für einen privaten Konstruktor erstellen) statt Verwenden einer statischen Klasse.
Singleton-Beispiele konzentrieren sich im Allgemeinen auf "den Code, der für die Initialisierung des Singleton verantwortlich ist" - in Wirklichkeit hätten Sie Instanzmitglieder, und manchmal würde es eine Schnittstelle implementieren. –
Die wirkliche Antwort, die Sie ihm geben sollten, ist, dass Sie sich nicht mit der Implementierung von Singletons befassen sollten, und stattdessen den IOC-Container verwenden, um die Lebensdauer des Objekts zu steuern. –
Ich frage mich, warum Leute in Programmierinterviews immer noch Fragen zu Singletons stellen. –