Que fait-on en plaçant un @ devant un nom de variable C #?

J’ai travaillé avec du code hérité C # et j’ai vu beaucoup de symboles @ devant les noms de variables. Qu’est-ce que cela signifie ou fait?

Actuellement, je le vois beaucoup devant des variables avec des noms communs qui ne sont pas réservés. Par exemple:

MyProcedure(@step.LoadInstanceId, @step.ResultCode, @step.StatusCode); 

Étant donné que cette étape n’est pas un mot réservé, y a-t-il une raison pour laquelle ils devraient être échappés?

C’est juste un moyen d’autoriser la déclaration de mots-clés réservés en vars.

 void Foo(int @ssortingng) 

Il vous permet d’utiliser un mot réservé, comme “public” par exemple, sous la forme d’un nom de variable.

 ssortingng @public = "foo"; 

Je ne recommanderais pas cela, car cela peut entraîner une confusion inutile.

Mettre @ devant une chaîne indique au calculateur de ne pas traiter les séquences d’échappement trouvées dans la chaîne.

De la documentation :

L’avantage de @ -quoting est que les séquences d’échappement ne sont pas traitées, ce qui facilite l’écriture, par exemple, d’un nom de fichier complet:

 @"c:\Docs\Source\a.txt" // rather than "c:\\Docs\\Source\\a.txt" 

Pour inclure un guillemet double dans une chaîne de caractères @, doublez-le:

 @"""Ahoy!"" cried the captain." // "Ahoy!" cried the captain. 

Une autre utilisation du symbole @ consiste à utiliser des identificateurs référencés (/ reference) qui sont des mots-clés C #. Pour plus d’informations, voir 2.4.2 Identificateurs .

Cela échappe aux mots réservés en C #.

La question initiale demande une raison pour laquelle on échapperait à un mot non réservé. Ce qui me vient à l’esprit, c’est que si step deviendrait un mot réservé à l’avenir, l’exemple de code serait toujours compilé. Je suppose que c’est aussi une option valable pour les générateurs de code.

Le signe @ est utilisé avec des identifiants identiques aux mots-clés de langue. Il y a deux utilisations principales: interopérer avec du code non C #. Dans des langages comme VB ou IronPython, les mots-clés ne sont pas les mêmes qu’en C # et ils peuvent avoir des classes et des propriétés déclarées avec des noms correspondant aux mots-clés C #. Si cette fonctionnalité n’était pas présente, ce code ne serait pas accessible en C #. – code généré par la machine. Si un générateur de code génère du code basé sur une source externe (par exemple WSDL), le générateur peut simplement préfixer tous les identificateurs avec @ et ne pas vérifier ni convertir les identificateurs correspondant aux mots-clés C #.

Êtes-vous sûr que votre cas n’est pas le deuxième?