2010-08-11 6 views
2

Possible en double:
C# member variable initialization; best practice?C#: initialisez variable tout en déclarant, ou dans le constructeur

En C#, est-il préférable d'initialiser une variable au moment de la déclaration, ou à l'intérieur un constructeur?

par ex.

public Foo{ 
    Bar b = new Bar(); 
    public Foo() { } 
} 

OU

public Foo{ 
    Bar b; 
    public Foo() { b = new Bar(); } 
} 
+1

Mieux pour quoi? – Oded

+0

Mieux pour toutes les raisons qui sont importantes dans la programmation C#. – CJ7

+0

Je préfère aller avec votre dernière version. Je pense qu'il énonce de la façon la plus lisible à quel moment certains morceaux de code sont exécutés, et il me permet facilement d'interagir avec le comportement par défaut en spécifiant de nouveaux constructeurs qui peuvent ou non invoquer le constructeur sans paramètre. Ajoutant cela comme un commentaire car il ne tente pas de répondre dans quel sens est * mieux * –

Répondre

2

Dans une classe simple comme cela, il ne fera pas de différence. L'avantage de la première est que vous pouvez omettre entièrement la déclaration du constructeur.

+0

Je ne pense pas que l'exemple donné était une implémentation spécifique. – hamishtaplin

+0

@dr_tchock: Comment pouvez-vous être si sûr? Peut-être qu'il travaille dans une usine FooBar? ;) –

0

Je n'aime tout simplement pas initialiser les membres d'instance au moment de la déclaration, à part les constantes. Cela me fait mal aux yeux, surtout si les noms des classes sont longs. Autrement d'un aspect linguistique, ce n'est pas vraiment une différence.

+0

Y compris les variables locales? J'essaie d'initialiser les variables locales au point de déclaration autant que raisonnablement possible. Je trouve que cela rend le sens de la variable plus clair. –

+0

@Jon Non compris les variables locales :) Je pense que l'auteur demandait des membres de la classe, pas des variables locales :) Au moins c'était mon impression. –

+0

Jon: En toute justice, Petar a spécifié des membres d'instance. – Gabe

3

Eh bien, "mieux" dépend de la situation.

Il est bon de savoir que -t finissent par faire une différence dans certains cas obscurs ... parce que le constructeur de la classe de base s'exécuter après initializers variables, mais avant le corps du constructeur. Cela peut faire une différence dans le cas (méchant) où une méthode virtuelle est appelée à partir du constructeur de base. Il vaut mieux éviter cette situation pour commencer quand cela est possible, attention à vous :)

Je pense que si la valeur initiale ne dépend jamais de paramètres, il est logique de l'initialiser au moment de la déclaration ... mais je ne le ferais pas prétendre être entièrement cohérent dans l'application que moi-même :)

0

Tout dépend, bien sûr, mais j'aime juste mettre les initialiseurs où ils ont le plus de sens. Parfois, il est bon de les mettre avec leurs déclarations de membres; d'autres fois, il est bon de les mettre dans le constructeur. Si j'ai plusieurs constructeurs, cependant, je préfère mettre les initalizers avec la déclaration, afin d'éviter le même code d'initialisation à plusieurs endroits - en particulier pour les champs en lecture seule.

Questions connexes