Udostępnij za pomocą


Konstruktory prywatne (Przewodnik programowania w języku C#)

Konstruktor prywatny jest specjalnym konstruktorem obiektu. 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 jasno określić, że nie można utworzyć instancji klasy.

Konstruktory prywatne są używane do zapobiegania tworzeniu wystąpień klasy, gdy nie ma pól ani metod wystąpienia, takich jak klasa Math 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: {Counter.currentCount}");

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
// Output: New count: 101

Pamiętaj, że jeśli usuniesz komentarz z następującej instrukcji z przykładu, spowoduje błąd, ponieważ konstruktor jest niedostępny ze względu na poziom zabezpieczeń.

// Counter aCounter = new Counter();   // Error

Zobacz też