Existe-t-il un moyen d'empêcher l'utilisation du constructeur par défaut? Tout ce que je peux penser est de lancer une exception, mais je voudrais quelque chose qui provoque une erreur de compilation.Empêche l'utilisation du constructeur par défaut
Répondre
- Si tout est statique dans la classe, pensez à en faire une classe statique. De cette façon, vous n'obtiendrez aucun constructeur.
- Si vous voulez un constructeur sans paramètre, mais vous ne voulez pas qu'il soit public, déclarer explicitement et de le rendre privé (ou etc interne)
- Si vous ne voulez pas un constructeur parameterless mais ne veulent constructeurs avec des paramètres, puis simplement déclarer ceux - le constructeur par défaut ne sera pas généré pour vous
Je pense qui devrait couvrir toutes les bases ...
Vous avez dit à peu près exactement ce que je tapais juste :) – Joel
Je voudrais savoir sur les classes statiques il y a longtemps. – luiscubal
sauf si c'est une structure et non une classe. Si c'est le cas, le ctor par défaut est généré (une bonne chose donc tous les accessoires sont initialisés) mais appelable (malheureusement) - c'est-à-dire que je veux forcer l'utilisateur à utiliser le ctor avec des paramètres. –
Rendez-le privé.
Ainsi,
class SomeClass
{
private SomeClass()
{
}
public SomeClass(int SomeParam)
{
}
}
+1 pour le point. – corsiKa
Si vous n'en avez pas besoin dans le type (ou les 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é. –
@Jon Je suis d'habitude une ceinture et des bretelles genre de gars donc je ferais normalement de cette façon de toute façon; De cette façon, ce que j'essaie de faire est clair pour quiconque le regarde. Bon à savoir qu'il est géré automatiquement par le compilateur, cependant, si j'oublie. –
Vous pouvez simplement le rendre privé:
private MyClass()
{
}
Sinon (si vous ne saviez pas déjà) si vous déclarez seulement un constructeur avec des paramètres, la valeur par défaut d'un ISN pas ajouté par le compilateur, par exemple
private MyClass(string myParameter)
{
//Can't call new MyClass() anymore
}
Une chose à mentionner que d'autres n'ont pas. Le constructeur par défaut doit toujours être capable de configurer les bits d'implémentation par défaut, pour éviter leur réutilisation. Ce n'est pas un problème s'il est privé, car vous pouvez toujours passer à un constructeur privé. Vous le rendez juste indisponible aux sources extérieures.
private MyClass()
{
}
public MyClass(string 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 d'autres réponses, vous pouvez lire le texte suivant , pour plus d'informations sur Singleton modèle, et quelques exemples. Le modèle Singleton repose sur le fait que le constructeur est privé.
- 1. Appel du constructeur par défaut à partir du constructeur paramétré
- 2. empêche l'exécution du constructeur par défaut dans le temps de conception dans ViewModel
- 3. constructeur comme argument par défaut
- 4. Constructeur statique et par défaut
- 5. Constructeur par défaut de NSObject
- 6. constructeur par défaut étrange syntaxe
- 7. Génériques Constructeur par défaut Java
- 8. C++, le paramètre par défaut sans constructeur par défaut
- 9. Désactivation du constructeur par défaut pour les classes non-POD
- 10. Obtention du constructeur par défaut d'une classe abstraite générique
- 11. Aucun constructeur par défaut approprié disponible?
- 12. Erreur # 1203: Aucun constructeur par défaut
- 13. Deux façons d'appeler le constructeur par défaut
- 14. classe Initializing sans constructeur par défaut
- 15. Création d'un constructeur par défaut en Java
- 16. constructeur par défaut pour une classe héritée
- 17. Impossible de trouver le constructeur par défaut
- 18. ASP.NET MVC - ASPX avec constructeur par défaut
- 19. Constructeur par défaut et héritage virtuel
- 20. Castle Windsor le constructeur par défaut est appelé à la place du constructeur avec une dépendance
- 21. Empêche le code instable d'entrer dans la ligne par défaut
- 22. Pourquoi mon constructeur par défaut n'est-il pas appelé ici? Pourquoi mon constructeur par défaut n'est-il pas appelé ici?
- 23. Comment utilisez-vous le constructeur par défaut pour un membre?
- 24. Paramètre de template par défaut dans le constructeur
- 25. Comment utiliser la réflexion pour obtenir un constructeur par défaut?
- 26. Quelle est la différence entre le constructeur par défaut et par défaut
- 27. Comment le constructeur par défaut de System.Drawing.Graphics est-il supprimé?
- 28. classe abstraite avec constructeur d'accès Api mais par défaut publié
- 29. Java: instanciation d'une classe générique sans constructeur par défaut
- 30. Construction d'un objet générique (pas de constructeur par défaut)
Vous pouvez rencontrer des problèmes si vous faites ceci: (. Reliure/sérialisation/etc) Dans .NET un constructeur par défaut est sans paramètre nécessaire pour un certain nombre de choses. Pensez à avoir des valeurs par défaut pour toutes les valeurs que vous devez définir via les paramètres constructor. Cela n'a peut-être pas d'importance dans votre cas, mais cela vaut la peine d'être mentionné. –