¿Cuál es el uso/significado del carácter @ en los nombres de variables en C#?
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?
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.
Simplemente te permite usar una palabra reservada como nombre de variable. No recomendado en mi humilde opinión (excepto en casos como el tuyo).
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.
A diferencia de los sigilos de Perl, un @
prefijo antes de un nombre de variable en C# no tiene significado. Si x
es una variable, @x
es 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;