Qual é o uso / significado do caractere @ em nomes de variables ​​em C #?

Descobri que você pode iniciar seu nome de variável com um caractere ‘@’ em C #. No meu projeto c # eu estava usando um serviço da web (eu adicionei uma referência da web para o meu projeto) que foi escrito em Java. Um dos objects de interface definidos no WSDL tinha uma variável de membro com o nome “params”. Obviamente, esta é uma palavra reservada em C #, então você não pode ter uma class com uma variável de membro com o nome “params”. O object proxy que foi gerado continha uma propriedade semelhante a esta:

public ArrayList @params { get { return this.paramsField; } set { this.paramsField = value; } } 

Eu procurei pela documentação do c # VS 2008, mas não consegui encontrar nada sobre isso. Também pesquisando no Google não me deu nenhuma resposta útil. Então, qual é o significado exato ou o uso do caractere ‘@’ em um nome de variável / propriedade?

   

    Diretamente da especificação da linguagem C # , identificadores (C #) :

    O prefixo “@” permite o uso de palavras-chave como identificadores, o que é útil na interface com outras linguagens de programação. O caractere @ não faz parte do identificador, portanto, o identificador pode ser visto em outras linguagens como um identificador normal, sem o prefixo. Um identificador com um prefixo @ é chamado de identificador integral.

    Apenas permite que você use uma palavra reservada como um nome de variável. Não recomendado IMHO (exceto em casos como você tem).

    Em C #, o caractere at (@) é usado para denotar literais que explicitamente não aderem às regras relevantes na especificação de idioma.

    Especificamente, ele pode ser usado para nomes de variables ​​que entram em conflito com palavras-chave reservadas (por exemplo, você não pode usar params, mas pode usar @params, mesmo com out / ref / qualquer outra palavra-chave na especificação de idioma). Além disso, ele pode ser usado para literais de string sem escape; isso é particularmente relevante com constantes de caminho, por exemplo, em vez de path = "c:\\temp\\somefile.txt" você pode escrever path = @"c:\temp\somefile.txt" . Também é muito útil para expressões regulares.

    Ao contrário dos sigils de Perl, um prefixo @ antes de um nome de variável em C # não tem significado. Se x é uma variável, @x é outro nome para a mesma variável.

     > string x = "abc"; > Object.ReferenceEquals(x, @x).Dump(); True 

    Mas o prefixo @ tem um uso , como você descobriu – você pode usá-lo para esclarecer nomes de variables ​​que o C # rejeitaria como ilegais.

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

    O símbolo @ permite que você use palavras-chave reservadas para o nome da variável. como @int , @string , @double etc.

    Por exemplo:

     string @public = "Reserved Keyword used for me and its fine"; 

    O código acima funciona bem, mas abaixo não funcionará:

     string public = "This will not compile"; 

    Ele simplesmente permite que você use palavras reservadas como nomes de variables. Eu queria um var chamado event no outro dia. Eu estava indo com _event vez disso, mas meu colega me lembrou que eu poderia chamá-lo @event vez.

    Outro caso de uso está nos methods de extensão. O primeiro parâmetro especial pode ser distinguido para denotar seu significado real com @this name. Um exemplo:

     public static TValue GetValueOrDefault( this IDictionary @this, TKey key, TValue defaultValue) { if (!@this.ContainsKey(key)) { return defaultValue; } return @this[key]; } 

    Se usarmos uma palavra-chave como o nome de um identificador, obtemos um erro do compilador “identificador esperado, ‘Nome do identificador’ é uma palavra-chave” Para superar esse erro, prefixar o identificador com “@”. Esses identificadores são identificadores verbais. O caractere @ não faz parte do identificador, portanto, o identificador pode ser visto em outros idiomas como um identificador normal, sem o prefixo

    Você pode usá-lo para usar as palavras-chave reservadas como nome da variável como

      int @int = 3; 

    o compilador irá ignorar o @ e compilar a variável como int

    não é uma prática comum usar o pensamento