Condividi tramite


Costruttori privati (Guida per programmatori C#)

Un costruttore privato è un costruttore di istanza speciale e viene generalmente utilizzato in classi contenenti solo membri static. Se una classe dispone di uno o più costruttori privati ma non include alcun costruttore pubblico, alle altre classi, tranne quelle annidate, non sarà consentita la creazione delle istanze della classe. Di seguito è riportato un 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 predefinito. Tenere presente che se non si utilizza un modificatore di accesso con il costruttore, questo rimarrà di tipo privato per impostazione predefinita. Tuttavia, il modificatore private viene solitamente utilizzato in modo esplicito per specificare che non è possibile creare un'istanza della classe.

I costruttori privati vengono utilizzati per impedire la creazione di istanze di una classe in assenza di metodi e campi di istanza, ad esempio la classe Math, oppure quando viene chiamato un metodo per ottenere un'istanza di una classe. Se tutti i metodi della classe sono statici, è consigliabile rendere statica l'intera classe. Per ulteriori informazioni, vedere Classi statiche e membri di classi statiche (Guida per programmatori C#).

Esempio

Di seguito è riportato l'esempio di una classe che utilizza 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: {0}", Counter.currentCount);

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

Se si rimuove il commento dall'istruzione dell'esempio riportata di seguito, verrà generato un errore poiché non è possibile accedere al costruttore a causa del livello di protezione.

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

Specifiche del linguaggio C#

Per altre informazioni, vedere la Specifiche del linguaggio C#. La specifica del linguaggio costituisce il riferimento ufficiale principale per la sintassi e l'uso di C#.

Vedere anche

Riferimenti

Classi e struct (Guida per programmatori C#)

Costruttori (Guida per programmatori C#)

Distruttori (Guida per programmatori C#)

private (Riferimenti per C#)

public (Riferimenti per C#)

Concetti

Guida per programmatori C#