2010-08-21 7 views
3

J'ai entendu des mauvaises choses à propos de l'utilisation excessive des régions, mais lorsque j'ajoute des énumérations à mes classes, je les place dans un #region "Enums" à la fin de la classe, et fais de même avec les structures et même les sous-classes.Comment regrouper des énumérations, des structures et des sous-classes dans des classes?

Existe-t-il un moyen meilleur/standard de regrouper de tels éléments dans les classes?

(Note: Ceci est étiqueté C#/VB mais peut-être la même situation existe pour d'autres langues, comme Java)

Répondre

3

Sûrement un groupement raisonnable est d'utiliser des fichiers sources séparés.

Pour les classes dont plus de quelques écrans sont pleins, vous devriez probablement avoir un fichier source distinct pour une telle classe. Sinon, trouver les différentes classes et d'autres éléments dans un fichier source peut être difficile.

Pour une collection d'énumérations sémantiquement liées et qui sont toutes assez petites pour tenir sur un écran, il est souvent judicieux de les mettre dans un seul fichier - mais vous devez nommer le fichier selon un but que tous de ces enums partagent. Si vous avez du mal à trouver un nom poignant qui décrit leur point commun, cela peut être une indication que vous devriez les séparer de nouveau. (Bien sûr, ce paragraphe s'applique également aux classes et structs, mais seulement très petits.)

Notez que même imbriquées classes/struct/énumérations peuvent être placés dans un fichier source séparé en C# - déclarer que la classe externe comme partiel.

Si vous avez une hiérarchie de classe complète de classes dérivées connexes (sous-classes), vous pouvez même créer un sous-répertoire pour chacune de ces hiérarchies. Par exemple, dans un sous-répertoire appelé Collections, vous pouvez avoir un fichier appelé CollectionBase.cs pour la classe de base abstraite et un fichier source distinct pour chaque classe dérivée.

+0

J'utilise un fichier source distinct pour chaque classe directement sous un espace de noms, même s'il est petit, et mes sous-classes ont tendance à être de petits objets spécifiques. Et la plupart de mes énumérations n'ont de rapport qu'avec une classe ou méthode d'une classe. Les classes partielles sont également une option dans VB, et cela semble un point valide. Je pensais que les classes partielles étaient uniquement destinées à WPF, +1. –

+1

Pour quelles classes partielles ont été inventées à l'origine est sans importance. C'est une fonctionnalité polyvalente que vous pouvez utiliser partout où cela a du sens. La même chose est vraie pour les méthodes d'extension et les expressions lambda - peu importe qu'elles aient été inventées pour LINQ. – Timwi

+0

Je me demande simplement à quel point il est différent de diviser une classe en fichiers plutôt qu'en régions. Les arguments contre les régions ont à peu près le même impact avec les fichiers. –

Questions connexes