Konstruktory prywatne (Przewodnik programowania w języku C#)
Konstruktor prywatny jest specjalnym konstruktorem wystąpienia. Jest on zwykle używany w klasach, które zawierają tylko statyczne elementy członkowskie. Jeśli klasa ma co najmniej jeden konstruktor prywatny i nie ma publicznych konstruktorów, inne klasy (z wyjątkiem klas zagnieżdżonych) nie mogą tworzyć wystąpień tej klasy. Na przykład:
class NLog
{
// Private Constructor:
private NLog() { }
public static double e = Math.E; //2.71828...
}
Deklaracja pustego konstruktora uniemożliwia automatyczne generowanie konstruktora bez parametrów. Należy pamiętać, że jeśli nie używasz modyfikatora dostępu z konstruktorem, nadal będzie on domyślnie prywatny. Jednak modyfikator prywatny jest zwykle używany jawnie, aby wyjaśnić, że nie można utworzyć wystąpienia klasy.
Konstruktory prywatne są używane do zapobiegania tworzeniu wystąpień klasy, gdy nie ma pól ani metod wystąpienia, takich jak Math klasa, lub gdy wywoływana jest metoda w celu uzyskania wystąpienia klasy. Jeśli wszystkie metody w klasie są statyczne, rozważ utworzenie kompletnej klasy statycznej. Aby uzyskać więcej informacji, zobacz Klasy statyczne i składowe klas statycznych.
Przykład
Poniżej przedstawiono przykład klasy używającej konstruktora prywatnego.
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
Zwróć uwagę, że jeśli usuniesz komentarz z następującej instrukcji z przykładu, wygeneruje błąd, ponieważ konstruktor jest niedostępny ze względu na poziom ochrony:
// Counter aCounter = new Counter(); // Error