64 votes

Constructeur vide ou pas de constructeur

Je pense qu'il n'est pas obligatoire d'avoir un constructeur par défaut dans une classe (C #).

Donc, dans cette situation, dois-je avoir un constructeur vide dans la classe ou puis-je le sauter?

Est-ce une bonne pratique d'avoir un constructeur vide par défaut?

 Class test
{
public test()
{

}
        ......
}
 

ou

 Class test
{
            ......
}
 

72voto

Soe Moe Points 1650

Si vous n'avez pas besoin de cette classe est utilisée par une tierce partie et vous n'aurez pas besoin d'ajouter de la surcharge de constructeur, à l'avenir, ne pas écrire un constructeur vide.

Mais...

Supposons que vous avez déjà expédié le produit et d'autres tiers a été à l'aide de votre classe. Après quelques mois, il y a une nouvelle exigence d'entrée et vous avez décidé d'ajouter un constructeur avec un paramètre de nom.

Lorsque vous ajoutez un autre constructeur surchargé dans la version 2, le compilateur C# ne génère pas le constructeur par défaut. Si vous avez oublié d'ajouter un constructeur vide explicitement, tous les autres de la troisième partie du code sera en pause.

OMI, j'ai toujours définir constructeur vide (une ligne) sur les cours publics si ceux-ci seront utilisées par des tiers.

35voto

Igor Zevaka Points 32586

KISS - Si votre classe n'a rien à faire dans le constructeur par défaut, ne le définissez pas. Le compilateur en générera un pour vous.

De la bouche du cheval :

À moins que la classe ne soit statique, le compilateur C # attribue un constructeur public par défaut aux classes sans constructeur afin de permettre l'instanciation de la classe.

10voto

this. __curious_geek Points 23728

There's nothing like default constructors. Elle est publique paramètre moins de constructeur en C#. Compilateur C# va chercher les constructeurs dans une classe lors de la compilation et ajoutera un public paramètre moins constructeur si aucun des constructeurs sont définis. Donc c'est ok pour ignorer la définition d'un constructeur si vos objets de classe n'ont pas besoin de toute opération spéciale pour la construction.

Deuxièmement, si vous définissez un constructeur avec paramètre puis compilateur ne sera pas ajouté à un public paramètre moins de constructeur, car le compilateur va assumer vos objets doivent être construits par le constructeur, vous avez défini. Cela dit, vous devez définir explicitement un paramètre moins de constructeur, si vous avez au moins un constructeur paramétré, si vous avez besoin de vos objets à construire avec parameteress constructeur.

Vous pouvez également avoir un privé constructeur sans paramètre ainsi que contribue à faire de singleton classes.

4voto

Stewart Points 2275

Si vous n'avez pas besoin d'un constructeur sans paramètre, n'ajoutez pas un dont le corps est vide. Cependant, si quelqu'un veut sérialiser/désérialiser des objets de votre classe, puis vous aurez besoin d'un constructeur sans paramètre.

Si vous définissez pas de constructeurs, alors le compilateur va générer automatiquement une valeur par défaut sans paramètre pour vous, mais il ne sera pas si vous définir un constructeur vous-même.

D'ailleurs, vous pouvez supprimer le compilateur C# est généré automatiquement dans le constructeur par défaut en définissant un vide, constructeur privé.

4voto

Nimesh Madhavan Points 2273

Par défaut, C# va ajouter un zéro paramètre du constructeur pour vous. Donc, ne pas en ajouter un si vous n'avez rien de spécial à y faire.

Vous devrez ajouter de tout constructeur vide de vous - même sans code - si vous avez un autre constructeur avec paramètres et veulent conserver le paramètre moins de constructeur en vie.

Un autre scénario où vous souhaitez ajouter un paramètre vide-moins de constructeur est si vous voulez changer son modificateur d'accès public à autre chose(privé, protégé ou à l'interne)

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