¿Cuál es el uso/significado del carácter @ en los nombres de variables en C#?

Resuelto Remko Jansen asked hace 16 años • 9 respuestas

Descubrí que puedes comenzar el nombre de tu variable con un carácter '@' en C#. En mi proyecto C# estaba usando un servicio web (agregué una referencia web a mi proyecto) que estaba escrito en Java. Uno de los objetos de interfaz definidos en WSDL tenía una variable miembro con el nombre "params". Obviamente, esta es una palabra reservada en C#, por lo que no puede tener una clase con una variable miembro con el nombre "params". El objeto proxy que se generó contenía una propiedad similar a esta:

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

Busqué en la documentación de VS 2008 c# pero no pude encontrar nada al respecto. Además, buscar en Google no me dio ninguna respuesta útil. Entonces, ¿cuál es el significado exacto o el uso del carácter '@' en un nombre de variable/propiedad?

Remko Jansen avatar Sep 18 '08 18:09 Remko Jansen
Aceptado

Directamente de la Especificación del lenguaje C# , Identificadores (C#) :

El prefijo "@" permite el uso de palabras clave como identificadores, lo cual resulta útil al interactuar con otros lenguajes de programación. El carácter @ en realidad no forma parte del identificador, por lo que el identificador podría verse en otros idiomas como un identificador normal, sin el prefijo. Un identificador con un prefijo @ se denomina identificador textual.

Atif Aziz avatar Sep 18 '2008 12:09 Atif Aziz

Simplemente te permite usar una palabra reservada como nombre de variable. No recomendado en mi humilde opinión (excepto en casos como el tuyo).

rslite avatar Sep 18 '2008 11:09 rslite

En C#, el carácter arroba (@) se usa para indicar literales que explícitamente no cumplen con las reglas relevantes en la especificación del lenguaje.

Específicamente, se puede usar para nombres de variables que chocan con palabras clave reservadas (por ejemplo, no puede usar params pero puede usar @params en su lugar, lo mismo con out/ref/cualquier otra palabra clave en la especificación del lenguaje). Además, se puede utilizar para cadenas literales sin escape; Esto es particularmente relevante con las constantes de ruta, por ejemplo, en lugar de path = "c:\\temp\\somefile.txt"puedes escribir path = @"c:\temp\somefile.txt". También es muy útil para expresiones regulares.

Tomer Gabel avatar Sep 18 '2008 12:09 Tomer Gabel

A diferencia de los sigilos de Perl, un @prefijo antes de un nombre de variable en C# no tiene significado. Si xes una variable, @xes otro nombre para la misma variable.

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

Pero el @prefijo tiene un uso , como ha descubierto: puede usarlo para aclarar nombres de variables que, de otro modo, C# rechazaría como ilegales.

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

> string @string;
Colonel Panic avatar Feb 15 '2013 10:02 Colonel Panic