Private Konstruktoren (C#-Programmierhandbuch)
Aktualisiert: November 2007
Ein privater Konstruktor ist ein spezieller Instanzkonstruktor. Er wird meistens für Klassen verwendet, die nur statische Member enthalten. Wenn eine Klasse über einen oder mehrere private und keine öffentlichen Konstruktoren verfügt, können andere Klassen (außer geschachtelte Klassen) keine Instanzen dieser Klasse erstellen. Beispiel:
class NLog
{
// Private Constructor:
private NLog() { }
public static double e = Math.E; //2.71828...
}
Die Deklaration des leeren Konstruktors verhindert die automatische Erstellung eines Standardkonstruktors. Beachten Sie, dass bei nicht erfolgter Verwendung eines Zugriffsmodifizierers mit dem Konstruktor dieser standardmäßig weiterhin privat ist. Der private-Modifizierer wird jedoch in der Regel verwendet, um explizit festzulegen, dass die Klasse nicht instanziiert werden kann.
Mithilfe von privaten Konstruktoren kann das Erstellen von Instanzen einer Klasse verhindert werden, wenn keine Instanzfelder oder Instanzmethoden vorhanden sind, wie es beispielsweise bei Math der Fall ist, oder wenn eine Methode zum Erstellen einer Instanz einer Klasse aufgerufen wird. Wenn alle Methoden in der Klasse statisch sind, sollten Sie in Betracht ziehen, die gesamte Klasse statisch zu machen. Weitere Informationen finden Sie unter Statische Klassen und statische Klassenmember (C#-Programmierhandbuch).
Beispiel
Im Folgenden sehen Sie ein Beispiel für eine Klasse, die einen privaten Konstruktor verwendet.
public class Counter
{
private Counter() { }
public static int currentCount;
public static int IncrementCount()
{
return ++currentCount;
}
}
class TestCounter
{
static void Main()
{
// If you uncomment the following statement, it will generate
// an error because the constructor is inaccessible:
// Counter aCounter = new Counter(); // Error
Counter.currentCount = 100;
Counter.IncrementCount();
Console.WriteLine("New count: {0}", Counter.currentCount);
// Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
// Output: New count: 101
Beachten Sie, dass das Auskommentieren der folgenden Anweisung aus dem Beispiel einen Fehler verursacht, da auf den Konstruktor aufgrund seiner Sicherheitsebene nicht zugegriffen werden kann:
// Counter aCounter = new Counter(); // Error
C#-Programmiersprachenspezifikation
Weitere Informationen finden Sie in den folgenden Abschnitten von C#-Programmiersprachenspezifikation.
10.11.5 Private Konstruktoren
10.1.1.3 Statische Klassen
Siehe auch
Konzepte
Referenz
Klassen und Strukturen (C#-Programmierhandbuch)
Konstruktoren (C#-Programmierhandbuch)