Sdílet prostřednictvím


Soukromé konstruktory (Průvodce programováním v C#)

Privátní konstruktor je speciální konstruktor instance. Obvykle se používá ve třídách, které obsahují pouze statické členy. Pokud má třída jeden nebo více privátních konstruktorů a žádné veřejné konstruktory, jiné třídy (s výjimkou vnořených tříd) nemohou vytvářet instance této třídy. Příklad:

class NLog
{
    // Private Constructor:
    private NLog() { }

    public static double e = Math.E;  //2.71828...
}

Deklarace prázdného konstruktoru zabraňuje automatickému generování konstruktoru bez parametrů. Všimněte si, že pokud nepoužíváte modifikátor přístupu s konstruktorem, bude ve výchozím nastavení privátní. Privátní modifikátor se však obvykle používá explicitně, aby bylo zřejmé, že třídu nelze vytvořit instanci.

Privátní konstruktory se používají k zabránění vytváření instancí třídy, pokud neexistují žádná pole instance nebo metody, jako Math je třída, nebo když je volána metoda pro získání instance třídy. Pokud jsou všechny metody ve třídě statické, zvažte nastavení úplné třídy jako statické. Další informace naleznete v tématu Statické třídy a členy statické třídy.

Příklad

Následuje příklad třídy používající privátní 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: {0}", Counter.currentCount);

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

Všimněte si, že pokud od příkladu neodkomentujete následující příkaz, vygeneruje se chyba, protože konstruktor je nedostupný z důvodu jeho úrovně ochrany:

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

Viz také