Empêcher l’utilisation du constructeur par défaut

Est-il possible d’empêcher l’utilisation du constructeur par défaut?

Tout ce que je peux penser à jeter une exception, mais je voudrais quelque chose qui provoque une erreur de compilation.

  • Si tout dans la classe est statique, pensez à en faire une classe statique. De cette façon, vous n’obtiendrez aucun constructeur.
  • Si vous voulez un constructeur sans paramètre mais que vous ne voulez pas qu’il soit public, déclarez-le explicitement et rendez-le privé (ou interne, etc.)
  • Si vous ne voulez pas de constructeur sans paramètre mais que vous voulez des constructeurs avec des parameters, déclarez-les simplement – le constructeur par défaut ne sera pas généré pour vous

Je pense que cela devrait couvrir toutes les bases …

Rendez-le privé

Alors,

class SomeClass { private SomeClass() { } public SomeClass(int SomeParam) { } } 

Vous pouvez simplement le rendre privé:

 private MyClass() { } 

Alternativement (si vous ne le saviez pas déjà) si vous déclarez simplement un constructeur avec des parameters, celui par défaut n’est pas ajouté par le compilateur, par exemple

 private MyClass(ssortingng myParameter) { //Can't call new MyClass() anymore } 

Une chose à mentionner que d’autres n’ont pas. Le constructeur par défaut devrait toujours être capable de configurer les bits d’implémentation par défaut, pour éviter la réutilisation. Ce n’est pas un problème s’il est privé, car vous pouvez toujours vous connecter à un constructeur privé. Vous venez de le rendre indisponible pour des sources extérieures.

 private MyClass() { } public MyClass(ssortingng something) : this() { } 

Cela résout le problème. Notez, cependant, que protégé peut en fait être une implémentation préférée si la classe n’est pas scellée.

En plus des autres réponses, vous pouvez lire le texte suivant, pour plus d’informations sur le modèle Singleton et quelques exemples. Le modèle Singleton repose sur le fait que le constructeur est privé.

http://www.yoda.arachsys.com/csharp/singleton.html