it-swarm.it

Qual è l'uso / il significato del carattere @ nei nomi delle variabili in C #?

Ho scoperto che puoi iniziare il nome della tua variabile con un carattere "@" in C #. Nel mio progetto C # stavo usando un servizio web (ho aggiunto un riferimento web al mio progetto) che è stato scritto in Java. Uno degli oggetti di interfaccia definiti nel WSDL aveva una variabile membro con il nome "params". Ovviamente questa è una parola riservata in C # quindi non puoi avere una classe con una variabile membro con il nome "params". L'oggetto proxy generato conteneva una proprietà simile a questa:

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

Ho cercato nella documentazione di VS 2008 c # ma non sono riuscito a trovare nulla al riguardo. Anche la ricerca di Google non mi ha dato risposte utili. Quindi qual è il significato esatto o l'uso del carattere "@" in un nome di variabile/proprietà?

287
Remko Jansen

Direttamente da Specifica del linguaggio C # , Identificatori (C #) :

Il prefisso "@" consente l'uso di parole chiave come identificatori, utile per l'interfacciamento con altri linguaggi di programmazione. Il carattere @ non fa effettivamente parte dell'identificatore, quindi l'identificatore potrebbe essere visto in altre lingue come un normale identificatore, senza il prefisso. Un identificatore con un prefisso @ è chiamato un identificatore testuale.

294
Atif Aziz

Ti consente solo di usare una parola riservata come nome di una variabile. IMHO non raccomandato (tranne in casi come te).

70
rslite

In C # il carattere at (@) viene utilizzato per indicare i letterali che esplicitamente non aderiscono alle regole pertinenti nelle specifiche della lingua.

In particolare, può essere utilizzato per nomi di variabili che si scontrano con parole chiave riservate (ad esempio non è possibile utilizzare i parametri ma è possibile utilizzare @params, lo stesso con out/ref/qualsiasi altra parola chiave nella specifica della lingua). Inoltre può essere utilizzato per letterali stringa senza caratteri di escape; questo è particolarmente rilevante con le costanti di percorso, ad es. invece di path = "c:\\temp\\somefile.txt" tu puoi scrivere path = @"c:\temp\somefile.txt". È anche molto utile per le espressioni regolari.

35
Tomer Gabel

A differenza dei sigilli di Perl, un prefisso @ Prima di un nome di variabile in C # non ha significato. Se x è una variabile, @x È un altro nome per la stessa variabile.

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

Ma il prefisso @ Ha un so, come hai scoperto - puoi usarlo per chiarire i nomi delle variabili che C # altrimenti rifiuterebbe come illegali.

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

> string @string;
12
Colonel Panic

Il simbolo @ Ti consente di utilizzare parole chiave riservate per il nome della variabile. come @int, @string, @double ecc.

Per esempio:

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

Il codice sopra funziona bene, ma sotto non funzionerà:

string public = "This will not compile";
9
Umar Abbas

Ti permette semplicemente di usare parole riservate come nomi di variabili. Volevo un var chiamato event l'altro giorno. Stavo per andare con _event invece, ma il mio collega mi ha ricordato che potrei semplicemente chiamarlo @event anziché.

4
Mark Embling

Un altro caso d'uso è nei metodi di estensione. Il primo parametro speciale può essere distinto per denotare il suo significato reale con @this nome. Un esempio:

public static TValue GetValueOrDefault<TKey, TValue>(
    this IDictionary<TKey, TValue> @this,
    TKey key,
    TValue defaultValue)
    {
        if ([email protected](key))
        {
            return defaultValue;
        }

        return @this[key];
    }
2
BartoszKP

Se utilizziamo una parola chiave come nome per un identificatore, otteniamo un errore del compilatore "identificatore previsto," Nome identificativo "è una parola chiave" Per superare questo errore, aggiungi l'identificatore a "@". Tali identificatori sono identificativi testuali. Il carattere @ non fa effettivamente parte dell'identificatore, quindi l'identificatore potrebbe essere visto in altre lingue come un normale identificatore, senza il prefisso

1
raji vineeth

Puoi usarlo per usare le parole chiave riservate come nome variabile come

 int @int = 3; 

il compilatore ignorerà il @ e compila la variabile come int

non è una pratica comune usare il pensiero

1
Mina Gabriel