web-dev-qa-db-fra.com

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

J'ai découvert que vous pouvez commencer votre nom de variable avec un caractère '@' en C #. Dans mon projet C #, j'utilisais un service Web (j'ai ajouté une référence Web à mon projet) écrit en Java. L'un des objets d'interface définis dans le WSDL avait une variable membre nommée "params". De toute évidence, il s'agit d'un mot réservé en C #, vous ne pouvez donc pas avoir une classe avec une variable membre nommée "params". L'objet proxy généré contenait une propriété ressemblant à 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. La recherche sur Google ne m’a pas non plus apporté de réponse utile. Alors, quelle est la signification exacte ou l'utilisation du caractère '@' dans un nom de variable/propriété?

287
Remko Jansen

Directement de Spécification du langage C # , Identifiants (C #) :

Le préfixe "@" permet d'utiliser des mots-clés comme identificateurs, ce qui est utile lors de l'interface avec d'autres langages de programmation. Le caractère @ ne faisant pas réellement partie de l'identifiant, il peut donc être vu dans d'autres langues comme un identifiant normal, sans le préfixe. Un identifiant avec un préfixe @ est appelé un identifiant textuel.

294
Atif Aziz

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

70
rslite

En C #, le caractère at (@) est utilisé pour désigner les littéraux qui n'adhèrent pas explicitement aux règles pertinentes de la spécification de langage.

Plus précisément, 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 paramètres mais vous pouvez utiliser @params, comme avec out/ref/tout autre mot clé de la spécification de langue). En outre, il peut être utilisé pour les littéraux de chaîne non évités. cela est particulièrement pertinent avec les constantes de chemin, par ex. au lieu de path = "c:\\temp\\somefile.txt" tu peux écrire path = @"c:\temp\somefile.txt". C'est aussi très utile pour les expressions régulières.

35
Tomer Gabel

Contrairement aux symboles de Perl, un préfixe @ Avant 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 sage, comme vous l'avez découvert - vous pouvez l'utiliser pour clarifier les noms de variables que C # rejetterait sinon comme illégales.

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

> string @string;
12
Colonel Panic

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";
9
Umar Abbas

Il vous permet simplement d'utiliser des mots réservés en tant que noms de variables. Je voulais une var appelée event l'autre jour. J'allais partir avec _event à la place, mais mon collègue m'a rappelé que je pouvais l'appeler simplement @event au lieu.

4
Mark Embling

Un autre cas d'utilisation concerne les méthodes d'extension. Le premier paramètre spécial peut être distingué pour indiquer sa signification réelle avec @this prénom. Un exemple:

public static TValue GetValueOrDefault<TKey, TValue>(
    this IDictionary<TKey, TValue> @this,
    TKey key,
    TValue defaultValue)
    {
        if ([email protected](key))
        {
            return defaultValue;
        }

        return @this[key];
    }
2
BartoszKP

Si nous utilisons un mot-clé comme nom d’un identifiant, nous obtenons une erreur de compilation "identifiant attendu", "Nom de l’identifiant" est un mot clé ". Pour remédier à cette erreur, préfixez l’identifiant avec" @ ". De tels identifiants sont des identifiants in extenso. Le caractère @ ne faisant pas réellement partie de l'identifiant, l'identifiant peut donc être vu dans d'autres langues comme un identifiant normal, sans le préfixe

1
raji vineeth

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 compiler la variable sous la forme int

ce n'est pas une pratique courante d'utiliser la pensée

1
Mina Gabriel