Quelle est l'utilité/signification du caractère @ dans les noms de variables dans 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'utilisais un service web (j'ai ajouté une référence web à mon projet) qui était écrit en Java. Un des objets d'interface définis dans la WSDL avait une variable membre avec le nom "params". Évidemment c'est un mot réservé dans C# donc vous ne pouvez pas avoir une classe avec une variable 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é dans la documentation de VS 2008 c# mais je n'ai rien trouvé à ce sujet. Aussi chercher Google ne m'a pas donné de réponses utiles. Alors, quelle est la signification exacte ou l'utilisation du caractère " @ " dans un nom de variable/propriété?
9 réponses
Directement à partir de la Spécification du Langage C# , Identificateurs (C#) :
, Le préfixe "@" permet l'utilisation de mots-clés comme identificateurs, qui est utile pour interfacer avec d'autres les langages de programmation. 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 identifiant, sans préfixe. Un l'identificateur avec un préfixe @ est appelé un compte identifiant.
il vous permet juste d'utiliser un mot réservé comme nom de variable. Pas recommandé IMHO (sauf dans les cas comme vous avez).
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.
en particulier, il peut être utilisé pour les noms de variables qui entrent en conflit avec des mots-clés réservés (par exemple, vous ne pouvez pas utiliser les params mais vous pouvez utiliser @params à la place, même avec out/ref/n'importe quel autre mot-clé dans la spécification de langue). En outre, il peut être utilisé pour des lignes littérales Non escapadrées; ceci est particulièrement pertinent avec les constantes de chemin, par exemple au lieu de path = "c:\temp\somefile.txt"
vous pouvez écrire path = @"c:\temp\somefile.txt"
. C'est aussi très utile pour les expressions régulières.
Contrairement aux Sigles de Perl, un préfixe @
devant un nom de variable en C# n'a aucune signification. 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 un utilisez , comme vous l'avez découvert - vous pouvez l'utiliser pour clarifier les noms de variables que C# rejetterait autrement comme illégales.
> string string;
Identifier expected; 'string' is a keyword
> string @string;
le symbole @
vous permet d'utiliser des mots-clés réservés pour le nom de la variable. comme @int
, @string
, @double
etc.
par exemple:
string @public = "Reserved Keyword used for me and its fine";
le code ci-dessus fonctionne bien, mais ci-dessous ne fonctionnera pas:
string public = "This will not compile";
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 dire _event
à la place, mais mon collègue m'a rappelé que je pouvais simplement l'appeler @event
à la place.
un Autre cas d'utilisation est dans les méthodes d'extension. Le premier paramètre spécial peut être distingué pour indiquer sa signification réelle avec le nom @this
. Un exemple:
public static TValue GetValueOrDefault<TKey, TValue>(
this IDictionary<TKey, TValue> @this,
TKey key,
TValue defaultValue)
{
if (!@this.ContainsKey(key))
{
return defaultValue;
}
return @this[key];
}
si nous utilisons un mot-clé comme nom pour un identifiant, nous obtenons une erreur de compilateur "identifiant attendu,' nom D'identificateur’ est un mot-clé" Pour corriger cette erreur, il faut préfixer l'identificateur par "@". Ces identificateurs sont des identificateurs textuels. Le caractère @ ne fait pas réellement partie de l'Identificateur, de sorte que l'identificateur peut être considéré dans d'autres langues comme un identificateur normal, sans le préfixe
vous pouvez l'utiliser pour utiliser les mots-clés réservés comme nom de variable comme
int @int = 3;
le compilateur ignorera le @
et compilera la variable comme int
ce n'est pas une pratique courante d'utiliser la pensée