14 votes

Quel est le besoin d'un constructeur privé en C#?

Quel est le besoin d'un constructeur privé en C#? Je l'ai eu comme question pour un test de C#.

32voto

Svish Points 32303

Par exemple, si vous avez une classe qui ne doit être créée que par des méthodes de fabrique. Ou si vous avez des surcharges du constructeur, et que certaines d'entre elles ne doivent être utilisées que par les autres constructeurs. Probablement d'autres raisons aussi =)

12voto

G B Points 1239

Si vous connaissez certains motifs de conception, c'est évident : une classe pourrait créer une nouvelle instance d'elle-même en interne et ne pas laisser les autres le faire. Un exemple en Java (je ne connais pas assez bien le C#, désolé) avec une classe singleton:

classe Meh 
{
  private Meh() { }
  private static Meh theMeh = new Meh();
  public static Meh getInstance() { return theMeh; }
}

11voto

Mehrdad Afshari Points 204872

Chaque fois que vous voulez empêcher l'instanciation directe d'une classe depuis l'extérieur de celle-ci, vous utiliserez un constructeur private. Par exemple, avant C# 2.0 qui a introduit les classes static, vous utilisiez un constructeur private pour accomplir à peu près la même chose :

sealed class StaticClass {
     private StaticClass() {
     }
     public static void DoSomething() {
     }
}

10voto

Arkain Points 4357

Lorsque vous souhaitez empêcher les utilisateurs de votre classe d'instancier directement la classe. Certains cas courants sont:

  • Classes contenant uniquement des méthodes statiques
  • Singletons

7voto

Mouk Points 954

Je peux me rappeler quelques utilisations pour cela:

  • Vous pourriez l'utiliser à partir d'une méthode de fabrique statique à l'intérieur de la même classe
  • Vous pourriez effectuer un travail commun à l'intérieur et ensuite l'appeler depuis un autre constructeur
  • Vous pourriez l'utiliser pour empêcher l'exécution d'ajouter automatiquement un constructeur vide
  • Il pourrait être utilisé (bien que privé) par certains outils de simulation et ORM (comme nhibernate)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X