337 votes

Quelle est l'utilisation / la signification du caractère @ dans les noms de variables en C #?

J'ai découvert que vous pouvez démarrer votre nom de variable avec un caractère '@' dans C#. Dans mon projet C# j'ai été en utilisant un service web (j'ai ajouté une référence web pour mon projet) qui a été écrit en Java. L'un des objets de l'interface définie dans le fichier WSDL a une variable de membre avec le nom "params". Évidemment, c'est un mot réservé en C#, donc vous ne pouvez pas avoir une classe avec une variable de membre avec le nom "params". L'objet proxy qui a été généré contenait une propriété qui ressemblait à ceci:

public ArrayList @params {
    get { return this.paramsField; }
    set { this.paramsField = value; }
}

J'ai cherché à travers le VS 2008, c# de la documentation, mais ne pouvait pas trouver quoi que ce soit. Aussi la recherche sur Google ne m'a pas donné toutes les réponses utiles. Alors, quel est le sens exact ou l'utilisation du caractère '@' dans une variable/nom de la propriété?

351voto

Atif Aziz Points 16967

Directement à partir de la Spécification du Langage C# , § 2.4.2 les Identifiants (C#) :

Le préfixe "@" permet l'utilisation de mots-clés comme identificateurs, qui est utile lors de l'interfaçage avec d'autres les langages de programmation. Le caractère @ n'est pas réellement partie de la identificateur, de sorte que l'identifiant peut être vu dans d'autres langues, comme un normal identificateur, sans le préfixe. Un l'identificateur avec un préfixe @ est appelé un compte identifiant.

83voto

rslite Points 17279

Il vous permet simplement d'utiliser un mot réservé en tant que nom de variable. Non recommandé à mon humble avis (sauf dans les cas comme vous avez).

39voto

Tomer Gabel Points 2520

En C# le signe @ est utilisé pour désigner les littéraux explicitement de ne pas respecter les règles pertinentes dans la langue spec.

Plus précisément, il peut être utilisé pour les noms de variables qui clash avec les mots réservés (par exemple, vous ne pouvez pas utiliser les paramètres, mais vous pouvez utiliser @params au lieu de cela, même avec out/ref/un autre mot-clé dans la spécification du langage). En outre, il peut être utilisé pour les sans échappement des littéraux de chaîne; cela est particulièrement vrai avec le chemin des constantes, par exemple, au lieu de path = "c:\\temp\\somefile.txt" vous pouvez écrire path = @"c:\temp\somefile.txt". Il est également très utile pour les expressions régulières.

15voto

Colonel Panic Points 18390

Contrairement aux sigils de Perl, un préfixe @ devant un nom de variable en C # n'a aucun sens. Si x est une variable, @x est un autre nom pour la même variable.

 > string x = "abc";
> Object.ReferenceEquals(x, @x).Dump();
True
 

Mais le préfixe @ a une utilité , comme vous l'avez découvert - vous pouvez l'utiliser pour clarifier les noms de variables que C # rejetterait autrement comme étant illégaux.

 > string string;
Identifier expected; 'string' is a keyword

> string @string;
 

5voto

Mark Embling Points 7337

Il vous permet simplement d'utiliser des mots réservés comme noms de variables. Je voulais un var appelé event l'autre jour. J'allais plutôt utiliser _event , mais mon collègue m'a rappelé que je pouvais simplement l'appeler @event place.

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