Partager via


Constructeurs privés (Guide de programmation C#)

Un constructeur privé est un constructeur d’instance spécial. Il est généralement utilisé dans les classes qui contiennent uniquement des membres statiques. Si une classe a un ou plusieurs constructeurs privés et aucun constructeur public, d’autres classes (à l’exception des classes imbriquées) ne peuvent pas créer d’instances de cette classe. Par exemple:

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

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

La déclaration du constructeur vide empêche la génération automatique d’un constructeur sans paramètre. Notez que si vous n’utilisez pas de modificateur d’accès avec le constructeur, il sera toujours privé par défaut. Toutefois, le modificateur privé est généralement utilisé explicitement pour indiquer clairement que la classe ne peut pas être instanciée.

Les constructeurs privés sont utilisés pour empêcher la création d’instances d’une classe lorsqu’il n’existe aucun champ ou méthode d’instance, tel que la Math classe, ou lorsqu’une méthode est appelée pour obtenir une instance d’une classe. Si toutes les méthodes de la classe sont statiques, envisagez de rendre la classe complète statique. Pour plus d’informations, consultez Classes statiques et membres de classes statiques.

Exemple :

Voici un exemple de classe utilisant un constructeur privé.

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

Notez que si vous décommentez l’instruction suivante dans l’exemple, cela générera une erreur, car le constructeur est inaccessible en raison de son niveau de protection.

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

Voir aussi