11
votes

Que dois-je nommer mes fichiers avec des définitions de classe générique?

J'écris quelques classes qui ont tous des arguments de type générique, mais je dois surcharger les classes car j'ai besoin d'un nombre différent d'arguments dans différents scénarios. Fondamentalement, j'ai xxx

je les veux tous dans la même espace de noms, mais dans un fichier source par classe. Que dois-je nommer les fichiers? Y a-t-il une meilleure pratique?


9 commentaires

Je ne pensais pas que c'était même possible de créer différentes classes avec le même nom, mais un nombre différent d'arguments génériques. Modifier: Oups, c'est C #, pas Java. Je doute que vous puissiez le faire en Java, à cause de la façon amusante, il doit gérer des classes génériques.


Microsoft ne fait-il pas cette chose très avec la classe tuple dans 4.0?


Voir, par exemple, tuple - représente un tuple de taille 1 tuple - représente une tuple de taille 2 tuple - représente un tuple de taille 3


Il est possible de classe publique A {} Classe publique A {} Classe publique A {}


À moins que Microsoft ne puisse faire quelque chose de spécial, les classes de tuple ont tous le même nom juste des arguments génériques différents.


@Chris, il parle de dossier noms, pas de noms de classe. Les multiples classes avec différents nombres de génériques sont complètement légales.


@anthony je m'adressais au point de Mike


En effet, j'ai clairement manqué de lire ce mot clé


Dupliqué possible de Convention de noms de fichiers de classes génériques


5 Réponses :


9
votes

J'ai vu des gens utiliser xxx

(le nombre est le nombre de paramètres génériques).

Je pense que c'est ce que vous obtenez comme un nom de caractères lorsque vous appelez .Tostring sur la classe.


4 commentaires

L'argument .tostring () est de loin le meilleur que j'ai vu dans des discussions à ce sujet jusqu'à présent. Sauf si quelque chose qui se détache dura le lendemain ou donc, c'est probablement ce que je vais faire.


D'accord. C'est ce qui se présente dans les résultats de la couverture de code également.


A marqué cela comme ma réponse "correcte" maintenant, car plus aucun argument convaincant n'est arrivé. Je pense que le fait que le fichier est nommé de la même manière que .tostring () fonctionne vraiment le meilleur moyen de le faire. (Le fait que .tostring () utilise des caractères pouvant ne pas être valides partout est une discussion différente ...)


@Tomas, je me méfiais aussi de la backttick au début, mais contrairement à l'apostrophe standard ', il devrait être un personnage valide à peu près partout.



1
votes

Je pense que vous ne trouverez pas beaucoup de dogme dans la communauté C # privilégiant des fichiers séparés pour chaque variante d'une classe générique avec le même nom; Je préfère simplement utiliser un pour le cas que vous décrivez, bien que je puisse voir une affaire pour ce que vous proposez si le code est nécessairement complexe / long pour chaque variation. En règle générale, j'utiliserais simplement le nom de la classe en question comme nom de fichier.

Si j'allais séparer les variantes en fichiers séparés, je pouvais voir utiliser la solution de Michael, bien que cela soit un peu douloureux pour ceux d'entre nous qui utilisent des outils de style UNIX sur la ligne de commande, par exemple, Cygwin ou Andlinux. J'utiliserais probablement un soulignement ou aucune ponctuation. Ou quelque chose comme 1p, 2p, 3p comme suffixe.


0 commentaires

1
votes

Je les mettit tout dans le même dossier à moins qu'ils ne soient grands (ce qui ne sera généralement pas, sauf celui avec le plus TS).

Il n'y a pas vraiment une meilleure pratique pour nommer des cours à part ce que vous trouvez dans les directives du Framework .NET, car il fait partie du côté créatif de la programmation, et malheureusement, la SSCLI ne revient que de 2,0 afin que vous ne puissiez pas trouver beaucoup d'aide là-bas.


0 commentaires

1
votes

J'utilise habituellement classname.1.cs , classname.2.cs , etc ... où le nombre est le nombre d'arguments génériques, similaires à la " `1 Notation utilisée dans la documentation-cadre (et dans la documentation XML dans votre Sourcecode). Parfois, vous avez également une classe sans arguments génériques (semblables à Icollection et ICollection` dans le cadre), et le nom de fichier serait juste le nom de la classe, comme prévu. Contrairement à l'utilisation d'une backtock, cela présente l'avantage de ne pas avoir de caractères non valides dans le nom de fichier. Tous les systèmes de fichiers, systèmes de versioning, systèmes d'exploitation permettent un caractère de backtick dans le nom.


0 commentaires

2
votes

Lorsque cette situation se pose, j'adopte la même convention utilisée dans les commentaires de la documentation XML pour C # Generics, qui est d'utiliser { et } au lieu de << / code> et > car les crochets d'angle ne sont pas amicaux dans des noms XML ou de fichiers, mais ceux-ci sont bouclés. Alors quelque chose comme:

myClass {t} .cs

myclass {t, k} .cs

Si vous avez vraiment de très nombreux paramètres, cela peut être un peu difficile à manifester en tant que système de dénomination, alors j'avais tendance à adopter la convention CLR de la backtick suivie d'un nombre de paramètres, par exemple

myClass`1.cs

myClass`2.cs

ou mélanger et correspondre aux deux régimes comme correspond à la situation.


0 commentaires