Condividi tramite


Costruttori privati (Guida per programmatori C#)

Aggiornamento: novembre 2007

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 nidificate, non sarà consentita la creazione delle istanze della classe. 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 ulteriori informazioni, vedere le seguenti sezioni incluse in Specifiche del linguaggio C#:

  • 10.11.5 Costruttori privati

  • 10.1.1.3 Classi statiche

Vedere anche

Concetti

Guida per programmatori C#

Riferimenti

Classi e strutture (Guida per programmatori C#)

Costruttori (Guida per programmatori C#)

Distruttori (Guida per programmatori C#)

private (Riferimenti per C#)

public (Riferimenti per C#)