Question Que signifie le symbole @ devant un nom de variable en C #? [dupliquer]


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

Je comprends que le symbole @ peut être utilisé avant un littéral de chaîne pour modifier la façon dont le compilateur analyse la chaîne. Mais que signifie-t-il lorsqu'un nom de variable est préfixé par le symbole @?


429
2018-01-09 20:10


origine


Réponses:


Le symbole @ vous permet d'utiliser un mot réservé. Par exemple:

int @class = 15;

Les travaux ci-dessus, quand le ci-dessous ne serait pas:

int class = 15;

551
2018-01-09 20:12



Le symbole @ sert deux buts en C #:

Tout d’abord, il vous permet d’utiliser un mot-clé réservé comme variable comme ceci:

int @int = 15;

La deuxième option vous permet de spécifier une chaîne sans avoir à échapper aucun caractère. Par exemple, le caractère '\' est un caractère d'échappement, vous devrez donc généralement le faire:

var myString = "c:\\myfolder\\myfile.txt"

Alternativement, vous pouvez le faire:

var myString = @"c:\myFolder\myfile.txt"

318
2018-01-09 20:17



Un point important que les autres réponses ont oublié est que "@keyword" est compilé dans "keyword" dans le CIL.

Donc, si vous avez un framework qui a été créé, disons, F #, ce qui vous oblige à définir une classe avec une propriété nommée "class", vous pouvez réellement le faire.

Ce n'est pas cette utile dans la pratique, mais ne pas l'avoir empêcherait C # de certaines formes de langage interop.

Je le vois généralement utilisé non pas pour l'interopérabilité, mais pour éviter les restrictions de mot-clé (généralement sur les noms de variables locales, où c'est le seulement effet)

private void Foo(){
   int @this = 2;
}

mais je découragerais fortement cela! Trouvez simplement un autre nom, même si le «meilleur» nom de la variable est l'un des noms réservés.


54
2018-01-09 20:26



Il vous permet d'utiliser un mot clé C # comme variable. Par exemple:

class MyClass
{
   public string name { get; set; }
   public string @class { get; set; }
}

10
2018-01-09 20:13