Private Konstruktoren (C#-Programmierhandbuch)
Ein privater Konstruktor ist ein spezieller Instanzenkonstruktor. Es wird in der Regel nur in Klassen verwendet, die nur statische Member enthalten. Wenn eine Klasse einen oder mehrere private Konstruktoren und keine öffentlichen Konstruktoren enthält, können andere Klassen (mit Ausnahme geschachtelter 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 Generierung eines parameterlosen Konstruktors. Wenn Sie keinen Zugriffsmodifizierer mit dem Konstruktor verwenden, ist er standardmäßig weiterhin privat. In der Regel wird der private Modifizierer jedoch explizit verwendet, um deutlich zu machen, dass die Klasse nicht instanziiert werden kann.
Private Konstruktoren werden verwendet, um das Erstellen von Instanzen einer Klasse zu verhindern, wenn keine Instanzenfelder oder Methoden vorhanden sind, z. B. die Math-Klasse, oder wenn eine Methode aufgerufen wird, um eine Instanz einer Klasse abzurufen. Wenn alle Methoden in der Klasse statisch sind, sollten Sie die vollständige Klasse statisch machen. Weitere Informationen finden Sie unter Statische Klassen und statische Klassenmember.
Beispiel
Im Folgenden ein Beispiel für eine Klasse mit einem privaten Konstruktor.
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: {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 wenn Sie die Auskommentierung der folgenden Anweisung aus dem Beispiel aufheben, ein Fehler erzeugt wird, weil auf den Konstruktor aufgrund seiner Schutzebene nicht zugegriffen werden kann:
// Counter aCounter = new Counter(); // Error