Constructeurs privés (Guide de programmation C#)
Mise à jour : novembre 2007
Un constructeur privé est une instance spéciale de constructeur. Un tel constructeur est généralement utilisé dans les classes qui contiennent uniquement des membres statiques. Si une classe possède un ou plusieurs constructeurs privés et aucun constructeur public, les autres classes (à l'exception des classes imbriquées) ne peuvent pas créer des 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 par défaut. Notez que si vous n'utilisez pas un modificateur d'accès avec le constructeur, ce dernier sera néanmoins privé par défaut. Toutefois, le modificateur private est habituellement utilisé explicitement pour qu'il soit clair 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 pas de champ d'instance ou de méthode, telle que la classe Math, ou lorsqu'une méthode est appelée pour obtenir une instance d'une classe. Si toutes les méthodes dans la classe sont statiques, envisagez de rendre la classe entière statique. Pour plus d'informations, consultez Classes statiques et membres de classe statique (Guide de programmation C#).
Exemple
Exemple de classe qui utilise 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: {0}", 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 supprimez les marques de commentaire de l'instruction suivante tirée de l'exemple, une erreur est générée, car le constructeur est alors inaccessible à cause de son niveau de protection :
// Counter aCounter = new Counter(); // Error
Spécification du langage C#
Pour plus d'informations, consultez les sections suivantes dans Spécifications du langage C#.
10.11.5 Constructeurs privés
10.1.1.3 Classes statiques
Voir aussi
Concepts
Référence
Classes et structs (Guide de programmation C#)
Constructeurs (Guide de programmation C#)