Condividi tramite


Costruttori privati (Guida per programmatori C#)

Un costruttore privato è un costruttore di istanza speciale. Viene in genere usato nelle classi che contengono solo membri statici. Se una classe ha uno o più costruttori privati e nessun costruttore pubblico, altre classi (ad eccezione delle classi nidificate) non possono creare istanze di questa classe. Per esempio:

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

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

La dichiarazione del costruttore vuoto impedisce la generazione automatica di un costruttore senza parametri. Si noti che se non si usa un modificatore di accesso con il costruttore sarà comunque privato per impostazione predefinita. Tuttavia, il modificatore privato viene in genere usato in modo esplicito per chiarire che la classe non possa essere istanziata.

I costruttori privati vengono usati per impedire la creazione di istanze di una classe quando non sono presenti campi o metodi di istanza, ad esempio la Math classe o quando viene chiamato un metodo per ottenere un'istanza di una classe. Se tutti i metodi della classe sono statici, è consigliabile rendere statica la classe completa. Per altre informazioni, vedere Classi statiche e membri di classi statiche.

Esempio

Di seguito è riportato un esempio di classe che usa un costruttore privato.

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

Si noti che se si annulla il commento dell'istruzione seguente dall'esempio, verrà generato un errore perché il costruttore non è accessibile a causa del relativo livello di protezione:

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

Vedere anche