188 votes

Les enums en C# devraient-ils avoir leur propre fichier ?

J'ai une classe qui utilise une énumération, l'énumération est actuellement dans son propre fichier, ce qui semble inutile.

Quel est l'avis général sur les enums qui sont placés dans l'espace de nom d'un fichier dans lequel ils sont consommés ? Ou bien l'enum doit-il vraiment vivre dans son propre fichier cs ?

Modifier

Je dois mentionner que si la classe en question utilise ces énumérations, il en va de même pour les appelants externes. En d'autres termes, une autre classe peut définir ces énumérations. Elles ne sont donc pas utilisées en interne par la classe, sinon cette question serait évidente.

94 votes

Si vous utilisiez des chiffres magiques, vous n'auriez pas du tout ce problème.

7 votes

Est-ce que cela devrait être un wiki communautaire ? Il n'y a pas de réponse correcte et pas de réelles considérations techniques en dehors des capacités de l'IDE.

1 votes

Ils peuvent se trouver dans le même espace de noms même s'ils sont dans des fichiers différents. Si vous posez la question secondaire de savoir s'il faut créer un espace de noms .Enums ET un nouveau fichier, alors je dirais, en général, non. Sinon, il se peut que votre compréhension des espaces de noms soit erronée et que vous deviez vous documenter à leur sujet (il n'y a pas grand-chose à faire, juste un mécanisme d'organisation).

108voto

James Curran Points 55356

Je ne dirais pas que c'est du gaspillage (combien coûte un fichier supplémentaire ?), mais c'est souvent gênant. En général, il y a une classe qui est le plus étroitement associée à l'énumération, et je les mets dans le même fichier.

7 votes

Il ajoute du bruit au répertoire lors de la navigation, c'est ce que je voulais dire par gaspillage.

133 votes

@Finglas - le bruit d'une personne est le signal d'une autre personne !

7 votes

Habituellement, il y a une classe qui est plus étroitement associée. Mais si cela change, si quelqu'un arrive à un moment donné et décide de prendre une dépendance sur l'enum, alors il est temps de procéder à une refactorisation.

81voto

Jeff Sternal Points 30147

Ce n'est qu'une question de préférence.

Je préfère mettre chaque énumération dans son propre fichier (de même pour chaque interface, classe et structure, aussi petite soit-elle). Cela les rend plus faciles à trouver lorsque je viens d'une autre solution ou que je n'ai pas déjà une référence au type en question.

En plaçant un seul type dans chaque fichier, il est également plus facile d'identifier les changements dans les systèmes de contrôle de la source sans faire de diffing.

12 votes

"Le fait de mettre un seul type dans chaque fichier facilite également l'identification des modifications dans les systèmes de contrôle des sources sans diffing." Une peur du diffing ne devrait pas constituer le fondement de vos décisions de conception. Je dirais même que toute personne qui ne sait pas comment différencier correctement un fichier dans le contrôle de source n'utilise pas vraiment le contrôle de source du tout.

2 votes

Nah. Je ne vois pas de crainte ici. C'est toujours agréable d'avoir de la commodité et de la lisibilité, ce qui permet d'augmenter l'efficacité du travail. Avoir une base de code bien organisée réduit le temps passé sur les différences et les conflits. @DanBechard

62voto

Fredrik Mörk Points 85694

C'est entièrement une question de style. Ce que j'ai tendance à faire, c'est d'avoir un fichier appelé Enums.cs dans la solution dans laquelle les déclarations d'enum sont collectées.

Mais on les trouve généralement par le biais du F12 de toute façon.

4 votes

Je pense que c'est probablement la meilleure option car : 1) il n'y a qu'un seul fichier au lieu de plusieurs qui pourraient être considérés comme encombrant le répertoire 2) le contenu du fichier est clair 3) cela signifie que vous savez où trouver un fichier. enum au lieu qu'elle soit dans un fichier contenant une classe qui est liée mais pas nécessairement la seule classe qui l'utilise

6 votes

Je n'aime absolument pas cela. Comme indiqué dans la réponse de James Curran, les enums ont une relation avec les classes principalement. En les mettant tous dans un fichier global, ils ne sont même plus dans un répertoire (pour un sous-espace de nom) auquel ils pourraient thématiquement appartenir.

3 votes

Oui @DebugErr, je suis d'accord avec vous. Depuis que cette réponse a été publiée en 2010, j'ai changé d'approche et j'ai tendance à opter pour un fichier par type, ou à déclarer les enums dans le même fichier que la classe correspondante.

49voto

Bryan Watts Points 22810

La question à se poser est la suivante : y a-t-il quelque chose dans un type d'énumération en C# qui indique que je dois le traiter différemment de tous les autres types que je crée ?

Si l'énumération est publique, elle doit être traitée comme tout autre type public. Si elle est privée, déclarez-la comme un membre imbriqué de la classe qui l'utilise. Il n'y a aucune raison impérieuse de mettre deux types publics dans le même fichier simplement parce que l'un est une énumération. Le fait qu'il s'agisse d'un type public est tout ce qui compte ; la saveur du type ne compte pas.

0 votes

Qu'en est-il si vous voulez réutiliser les enums dans une solution différente du même projet d'entreprise ? Lier les enums à une classe qui les utilise serait très difficile à réutiliser.

0 votes

@mko : La référence du projet signifie déjà que la classe et l'enum seront disponibles pour les différentes solutions. Qu'est-ce qui rendrait la chose difficile ?

0 votes

Bien sûr, mais voulez-vous vraiment partager une classe entière avec sa logique si vous voulez seulement utiliser les enums. De plus, que se passe-t-il si des classes différentes partagent la même énumération ? Où la placer ?

28voto

Tommy Carlier Points 3954

Un autre avantage de mettre chaque type (classe, struct, enum) dans son propre fichier est le contrôle de la source. Vous pouvez facilement obtenir l'historique complet du type.

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