Costruttori privati (Guida per programmatori C#)Private Constructors (C# Programming Guide)

Un costruttore privato è un costruttore di istanza speciale.A private constructor is a special instance constructor. Viene generalmente usato in classi contenenti solo membri statici.It is generally used in classes that contain static members only. Se una classe ha uno o più costruttori privati ma non include alcun costruttore pubblico, le altre classi, ad eccezione di quelle annidate, non potranno creare istanze della classe.If a class has one or more private constructors and no public constructors, other classes (except nested classes) cannot create instances of this class. Ad esempio:For example:

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.The declaration of the empty constructor prevents the automatic generation of a parameterless constructor. Tenere presente che se non si usa un modificatore di accesso con il costruttore, questo rimarrà di tipo privato per impostazione predefinita.Note that if you do not use an access modifier with the constructor it will still be private by default. Tuttavia, il modificatore private viene solitamente usato in modo esplicito per specificare che non è possibile creare un'istanza della classe.However, the private modifier is usually used explicitly to make it clear that the class cannot be instantiated.

I costruttori privati vengono usati 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.Private constructors are used to prevent creating instances of a class when there are no instance fields or methods, such as the Math class, or when a method is called to obtain an instance of a class. Se tutti i metodi della classe sono statici, è consigliabile rendere statica l'intera classe.If all the methods in the class are static, consider making the complete class static. Per altre informazioni, vedere Classi statiche e membri di classi statiche.For more information see Static Classes and Static Class Members.

EsempioExample

Di seguito è riportato l'esempio di una classe che usa un costruttore privato.The following is an example of a class using a private constructor.

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:Notice that if you uncomment the following statement from the example, it will generate an error because the constructor is inaccessible because of its protection level:

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

Specifiche del linguaggio C#C# Language Specification

Per altre informazioni, vedere Operatore as in Specifica del linguaggio C#.For more information, see Private constructors in the C# Language Specification. La specifica del linguaggio costituisce il riferimento ufficiale principale per la sintassi e l'uso di C#.The language specification is the definitive source for C# syntax and usage.

Vedere ancheSee also