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

StackOverflow https://stackoverflow.com/questions/91817

  •  01-07-2019
  •  | 
  •  

Question

J'ai découvert que vous pouvez commencer le nom de votre 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 portant le nom "params". Évidemment, il s’agit d’un mot réservé en C #, vous ne pouvez donc pas avoir de classe avec une variable membre portant le nom "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 effectué une recherche 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é?

Était-ce utile?

La solution

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

  

Le préfixe " @ " permet l'utilisation de   mots-clés en tant qu'identificateurs, ce qui est   utile lors de l'interfaçage avec d'autres   langages de programmation. Le personnage @   ne fait pas partie de la   identifiant, donc l'identifiant peut être   vu dans les autres langues comme une normale   identifiant, sans le préfixe. Un   identifiant avec un préfixe @ est appelé   un identifiant textuel.

Autres conseils

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

En C #, le caractère at (@) est utilisé pour désigner les littéraux qui ne sont pas explicitement conformes aux règles pertinentes dans la spécification de langue.

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 également 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 \\ quelquefichier.txt" , vous pouvez écrire path = @ "c: \ temp \ quelquefichier.txt" . C'est aussi très utile pour les expressions régulières.

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 une utilisation , 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;

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 en tant que noms de variables. Je voulais une var appelée event l'autre jour. J'allais utiliser _event à la place, mais mon collègue m'a rappelé que je pouvais simplement l'appeler @event à la place.

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 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 d'un identifiant, nous obtenons un identifiant d'erreur du compilateur attendu, & # 8216; Nom de l'identifiant & # 8217; est un mot clé & # 8221; Pour remédier à cette erreur, préfixez l'identifiant avec & # 8220; @ & # 8221 ;. De tels identifiants sont des identifiants textuels. 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

Vous pouvez l'utiliser pour utiliser les mots clés réservés en tant que nom de variable, comme

 int @int = 3; 

le compilateur ignorera le @ et compilera la variable sous la forme int

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top