2009-01-09 38 views

Répondre

519

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

int @class = 15; 

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

int class = 15; 
+17

Avec quel est-il différent que, disons, un trait de soulignement? –

+66

Avec un symbole @, le nom est enregistré dans l'assembly en tant que "classe", par opposition à un trait de soulignement "_class". Ainsi, si un autre langage .NET ne définit pas "class" comme un mot réservé, ils pourraient utiliser le nom simplement "class". –

+28

Si vous l'utilisez @class un nom de propriété, vous pouvez accéder comme ceci: MyClass.class au lieu de –

8

Il vous permet d'utiliser un mot-clé C# en tant que variable. Par exemple:

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

Le symbole @ sert 2 buts en C#:

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

int @int = 15; 

La deuxième option permet vous spécifiez une chaîne sans devoir échapper aucun caractère. Par exemple, le caractère « \ » est un caractère d'échappement si généralement vous devez faire ceci:

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

Sinon, vous pouvez le faire:

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

Comment cela affecte les chaînes était exactement ce que je cherchais. Merci! – Scott

+3

Merci, l'utilisation de @ pour les chaînes était exactement ce que je cherchais – Oliver

+2

Vous avez encore besoin d'échapper à des guillemets doubles en les doublant. –

50

Un point important que les autres réponses oublié, est que "@keyword" est compilé en "mot-clé" dans le CIL.

Donc, si vous avez un cadre qui a été faite, par exemple, F #, qui vous oblige à définir une classe avec une propriété nommée « classe », vous pouvez réellement le faire.

Ce n'est pas que utile en 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 interop, mais pour éviter les restrictions de mot-clé (généralement sur les noms de variables locales, où il s'agit de l'effet seulement).

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

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

+3

C'est probablement un bon conseil. Je pense que le qualificatif @ est l'équivalent du carré de VB.Net, donc l'équivalent VB serait: dim [Classe] comme Int32 = 15 –

+2

@Michael C'est exactement l'équivalent de la syntaxe du carré de VB.NET. http://stackoverflow.com/questions/6639688/using-keywords-as-identifiers-in-f note que F # utilise un double backticks autour d'un identifiant dans le même but. – ClickRick

+1

Comme un commentaire tardif - "pas que c'est utile" - dans MVC c'est ainsi que vous pouvez transmettre une propriété nommée "class" au rendu e - qui devient html "class" pour définir la classe CSS. – TomTom