Question Classes C # dans des fichiers séparés?


Chaque classe de mon projet C # devrait-elle avoir son propre fichier (à votre avis)?


55
2017-09-27 23:52


origine


Réponses:


Bien que la stratégie à une classe par fichier soit strictement appliquée à Java, elle n'est pas requise par C #. Cependant, c'est généralement une bonne idée.

Je brise généralement cette règle si j'ai une très petite classe d'assistance qui n'est utilisée que par la classe principale, mais je préfère le faire en tant que classe interne imbriquée pour des raisons de clarté.

Vous pouvez cependant diviser une seule classe en plusieurs fichiers en utilisant le partial mot-clé. Ceci est utile pour séparer votre code du code généré par un assistant.


87
2017-09-27 23:55



Les fichiers sont bon marché, vous ne rendez service à personne en consolidant de nombreuses classes dans des fichiers uniques.

Dans Visual Studio, renommer le fichier dans l'Explorateur de solutions renommera la classe et toutes les références à cette classe dans votre projet. Même si vous utilisez rarement cette fonctionnalité, le faible coût des fichiers et la facilité de les gérer signifient que l’avantage est infiniment précieux, quand il est divisé par son coût.


38
2017-09-28 00:11



Comme d’autres l’ont dit, un fichier par type en général - même si d’autres ont fait la distinction public / privé, je dirais simplement "un fichier de premier niveau par type" (de sorte que même les types internes de premier niveau obtiennent leurs propres fichiers) .

J'ai une exception à cela, ce qui est moins pertinent avec l'arrivée des types de délégué Func et Action dans .NET 3.5: si je définis plusieurs types de délégués dans un projet, je les regroupe souvent dans un fichier appelé Delegates.cs. .

Il y a aussi d'autres exceptions très occasionnelles - j'ai récemment utilisé des classes partielles pour que plusieurs classes générées automatiquement implémentent la même interface. Ils ont déjà défini les méthodes appropriées, il ne s'agissait donc que d'écrire:

public partial class MessageDescriptor : IDescriptor<MessageDescriptorProto> {}
public partial class FileDescriptor : IDescriptor<FileDescriptorProto> {}

etc. Placer tous ces fichiers dans leurs propres fichiers aurait été un peu idiot.

Une chose à garder à l'esprit avec tout ceci: l'utilisation de ReSharper facilite l'accès à vos classes, qu'elles soient ou non dans des fichiers avec un nom sensible. Cela ne veut pas dire que les organiser correctement n'est pas une bonne chose de toute façon; c'est plus pour renforcer l'idée que ReSharper bascule :)


18
2017-09-28 06:35



Je crois personnellement que chaque classe doit être dans son propre fichier, cela inclut également les types imbriqués. Les seules exceptions à cette règle pour moi sont les délégués personnalisés.

La plupart des réponses ont exclu les classes privées de cette règle, mais je pense que celles-ci devraient également figurer dans leur propre fichier. Voici un modèle que j'utilise actuellement pour les types imbriqués:

Foo.cs: // Ne contient que l'implémentation de Foo

public partial class Foo 
{
   // Foo implementation
}

Foo.Bar.cs: // Ne contient que l'implémentation de Foo.Bar

public partial class Foo
{
  private class Bar
  {
    // Bar implementation
  }
}

8
2017-09-28 19:13



Ça dépend. La plupart du temps, je dirais oui, placez-les dans des fichiers séparés. Mais si j'avais une classe d'assistance privée qui ne serait utilisée que par une autre classe (comme un nœud ou un élément d'une liste liée), je ne recommanderais pas de les séparer.


7
2017-09-28 00:07



Ils devraient être dans des fichiers différents, même si cela semble excessif. C'est une erreur que je commets encore fréquemment.

Il arrive toujours un moment où vous avez ajouté suffisamment de code à une classe qui mérite son propre fichier. Si vous décidez de créer un nouveau fichier pour cela à ce moment-là, vous perdrez votre historique de validation, ce qui vous pique toujours lorsque vous en avez envie.


5
2017-09-28 02:35



Classes publiques: oui Cours privés: (inutile de le dire) non


3
2017-09-27 23:54



En fait, je préfère les gros fichiers .cs, 5000 lignes est assez raisonnable, bien que la plupart de mes fichiers ne contiennent que 500-1000 (en C ++, cependant, j'ai des fichiers effrayants). Le navigateur d'objets / la vue de classe, la définition de la recherche et la recherche incrémentielle (-I; merci pour cette astuce, Jeff Atwood!) Facilitent la recherche d'une classe ou d'une méthode spécifique.

C’est probablement tout parce que j’ai peur de fermer des onglets sans intérêt.

Cela dépend bien sûr de votre façon de travailler, mais il y a plus qu'assez d'outils pour ne pas avoir à utiliser d'horribles vieilles années 70 fichier navigation source (Blague, si ce n’était pas évident).


3
2017-09-28 02:09