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

Descubrí que puedes comenzar tu nombre de 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 el 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 que se veía así:

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, la búsqueda 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 que es útil al interactuar con otros lenguajes de progtwigción. El carácter @ no es realmente 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 literal.

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

En C #, el caracter at (@) se usa para denotar literales que explícitamente no se adhieren a las reglas relevantes en la especificación del lenguaje.

Específicamente, puede usarse 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 idioma). Además, se puede utilizar para literales de cadenas no escamadas; esto es particularmente relevante con las constantes de ruta, por ejemplo, en lugar de path = "c:\\temp\\somefile.txt" puede escribir path = @"c:\temp\somefile.txt" . También es realmente útil para expresiones regulares.

A diferencia de los sigilos de Perl, un prefijo @ antes de un nombre de variable en C # no tiene ningún 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 has descubierto, puedes usarlo para aclarar nombres de variables que C # rechazaría de otra manera como ilegales.

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

El símbolo @ permite usar palabras clave reservadas para el nombre de la variable. como @int , @string , @double , etc.

Por ejemplo:

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

El código anterior funciona bien, pero a continuación no funcionará:

 string public = "This will not compile"; 

Simplemente le permite usar palabras reservadas como nombres de variables. Yo quería un event var llamado el otro día. Iba a ir con el _event en _event lugar, pero mi colega me recordó que podría llamarlo @event en @event lugar.

Otro caso de uso está en los métodos de extensión. El primer parámetro especial se puede distinguir para denotar su significado real con @this nombre. Un ejemplo:

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

Si usamos una palabra clave como el nombre de un identificador, obtenemos un error de comstackción “identificador esperado”, “nombre identificador” es una palabra clave “Para superar este error, prefija el identificador con” @ “. Dichos identificadores son identificadores literales. El carácter @ no es realmente parte del identificador, por lo que el identificador podría verse en otros idiomas como un identificador normal, sin el prefijo

Puede usarlo para usar las palabras clave reservadas como nombre de variable como

  int @int = 3; 

el comstackdor ignorará @ y comstackrá la variable como int

no es una práctica común usar el pensamiento