Existe-t-il un moyen d'empêcher l'utilisation du constructeur par défaut ?
Tout ce à quoi je pense, c'est de lancer une exception, mais je voudrais quelque chose qui provoque une erreur de compilation.
Existe-t-il un moyen d'empêcher l'utilisation du constructeur par défaut ?
Tout ce à quoi je pense, c'est de lancer une exception, mais je voudrais quelque chose qui provoque une erreur de compilation.
I pensez à qui devrait couvrir toutes les bases...
À moins qu'il ne s'agisse d'une structure et non d'une classe. Si c'est le cas, le ctor par défaut est généré (une bonne chose pour que tous les props soient initialisés) mais appelable (malheureusement) - c'est-à-dire que je veux forcer l'utilisateur à utiliser le ctor avec des params.
À moins que vous n'en ayez besoin dans le type (ou dans des types imbriqués), vous pouvez le supprimer entièrement ici - il ne sera généré que si aucun constructeur n'est explicitement déclaré.
Je suis généralement du genre à porter des ceintures et des bretelles, donc je le ferais normalement de cette façon ; de cette façon, ce que j'essaie de faire est clair pour quiconque regarde. Il est bon de savoir que le compilateur s'en occupe automatiquement, si j'oublie.
J'y parviendrais en ajoutant un commentaire sur le constructeur paramétré : "Si vous supprimez ce constructeur, veuillez vous assurer qu'il n'y a pas de constructeur public par défaut" ou quelque chose de ce genre. Actuellement, ce code vous donne essentiellement la permission de créer une instance sans aucun paramètre dans la classe. Cela posera également des problèmes s'il y a des variables en lecture seule, car vous devrez leur attribuer des valeurs...
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 paramètres, celui par défaut n'est pas ajouté par le compilateur, par ex.
private MyClass(string myParameter)
{
//Can't call new MyClass() anymore
}
Une chose à mentionner que d'autres n'ont pas fait. 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 enchaîner vers un constructeur privé. Vous le rendez simplement indisponible pour les sources extérieures.
private MyClass()
{
}
public MyClass(string something) : this()
{
}
Cela résout le problème. Notez cependant que protected peut en fait être une implémentation préférée si la classe n'est pas scellée.
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.
4 votes
Vous risquez d'avoir des problèmes si vous faites cela : Dans .NET, un constructeur sans paramètre par défaut est nécessaire pour un certain nombre de choses (liaison/sérialisation/etc.). Pensez à avoir des valeurs par défaut pour toutes les valeurs que vous devez définir via les paramètres du constructeur. Cela peut ne pas être important dans votre cas, mais cela vaut la peine d'être mentionné.