web-dev-qa-db-fra.com

Quels caractères sont autorisés dans le nom de classe C #?

Quels caractères sont autorisés et ce qui n'est pas autorisé dans un nom de classe C #? S'il te plait peux-tu aider?

EDIT: À préciser. Quels caractères spéciaux sont autorisés? Soyez précis, car les liens vers des spécifications de 50 pages dans un langage hautement technique ne sont pas une réponse qui m'aidera beaucoup.

EXPLICATION: Ce que j'essaie d'accomplir, c'est de diviser le nom de la classe en parties distinctes, par exemple:

classe Person @ WorkOffice @ Helper @ Class

{

}

Et je pense à un moyen d'utiliser une sorte de personnage ou autre pour pouvoir obtenir des pièces Person, WorkOffice, Helper et Class à partir de ce nom de classe.

Et oui, je sais que c'est fou, mais j'en ai besoin de cette façon. Je sais que je peux utiliser des attributs et de la réflexion pour stocker ces données dans la méta de classe mais ce n'est pas le cas, alors ne suggérez pas cette solution.

59
Tomasz Smykowski

Les détails des spécifications sont ici . Essentiellement, tout caractère unicode (y compris les échappements unicode) dans les classes de caractèresL , Ll , Lt , - Lm , Lo , Nl , Mn , Mc , Nd =, Pc , et Cf . Le premier caractère est une exception et ce doit être une lettre (classes L , Ll , Lt , Lm , ou Lo ) ou un trait de soulignement. De plus, si l'identifiant est un mot-clé, vous devez coller un @ devant. Le @ est facultatif sinon.

64
thecoop

Les identificateurs valides en C # sont définis dans C # Language Specification , item 9.4.2. Les règles sont très simples:

  • Un identifiant doit commencer par une lettre ou un trait de soulignement
  • Après le premier caractère, il peut contenir des chiffres, des lettres, des connecteurs, etc.
  • Si l'identifiant est un mot-clé, il doit être précédé de "@"

source

24
Jeremy Coenen

Les catégories Unicode peuvent être trouvées ici: http://www.dpawson.co.uk/xsl/rev2/UnicodeCategories.html

Et à partir de là, vous pouvez choisir la plupart des choses au sein des groupes (à partir de spécifications , que d'autres ont correctement indiqué aussi):

Lu, Ll, Lt, Lm, Lo, Nl, Mn, Mc, Nd, Pc, Cf

Sachez cependant que Visual Studio (ou est-ce Resharper) ne les aimera pas nécessairement tous, mais la plupart d'entre eux compilent. Prenons par exemple le personnage 30FB KATAKANA MIDDLE DOT. Il compile bien, mais il ne joue pas Nice avec l'IDE. Mais ce truc bizarre FE34 PRESENTATION FORM POUR VERTICAL WAVY LOW LINE fonctionne très bien.

Voici un séparateur qui fonctionne bien:

class Person〱WorkOffice〱Helper〱Class
{

}

Je ne dis pas que je recommande d'utiliser des caractères étranges. Mais pour des occasions spéciales comme cela semble être :)

EDIT: Notez que la spécification indique qu'elle autorise les caractères Unicode 3.0 . J'ai ignoré cela et je me suis demandé pourquoi beaucoup de personnages ne fonctionneraient pas, même s'ils appartenaient aux bons groupes. Vérifiez cette question pour plus de détails .

14
asgerhallas

Notez que, comme l'indique la boucle, le terme "caractère" dans le contexte d'Unicode est beaucoup plus large que les seules lettres alphabétiques.

Fondamentalement, beaucoup de symboles Unicode peuvent être valablement utilisés dans les identificateurs, même s'ils peuvent être un peu difficiles à taper dans Windows.

Par exemple:

  • Maintenez la touche ALT enfoncée
  • Tapez '0394' sur le clavier
  • Relâchez ALT

Ajoutera un Delta grec en majuscules à votre code ... il s'agit d'une lettre d'identification valide en ce qui concerne C #.

Notez cependant que la conformité CLS passe par la fenêtre ... mais au vu de cela, vous ne serez peut-être pas trop préoccupé par cela de toute façon.

3
jerryjvl

Voici un article qui pourrait vous être utile: Normes de codage C # et conventions de dénomination

table

En bref, en commun, le premier mot/partie/lettre de l'objet est en minuscule tandis que la classe est en majuscule .

Par exemple:

HtmlHelper htmlHelper; 
FtpTransfer ftpTransfer;
UIControl uiControl;
0
V.7