Parola chiave "dinamica" C#... è davvero una parola chiave RESERVED o solo un identificatore che significa qualcosa di speciale se usato come tipo?

StackOverflow https://stackoverflow.com/questions/2124001

Domanda

Ho un parser C# 4.0.Accetta "dinamico" come parola chiave come tipo.I miei viaggi di parser rispetto alle dichiarazioni trovate nei programmi C# 3.0 di lavoro della forma di:

dynamic = <exp> ;

Quindi, dinamica è davvero una parola chiave?Oppure può ancora essere utilizzato come nome identificativo arbitrario?(Se è così, perché "int" non viene trattato allo stesso modo)?

Esiste una specifica di riferimento da qualche parte che indica se la parola chiave dinamica è?L'ultima specifica ECMA C# 4 non menziona nemmeno "dinamico" e il meglio che riesco a trovare sul sito MS è una "specifica preliminare" che dice che è una parola chiave ma sospetto che sia solo una scrittura sciatta.

È stato utile?

Soluzione

dynamic è una parola chiave contestuale come di C # 4.0. La quarta edizione del ECMA C # spec non si riferisce a C # 4.0. (Si noti la data di pubblicazione 2006).

MSDN descrive come parola chiave.

E 'anche in questo tabella di parole chiave contestuali . (Scorrere verso il basso).

Altri suggerimenti

Non è un "normale" parola chiave come if, for etc.

E 'un contestuale parole chiave come yield, from etc.

In particolare, questo compila:

object dynamic = 0; // dynamic is a contextual keyword

, ma questo non lo fa:

object string = 0; // string is a regular keyword

Dovresti "fuga" string in questo modo:

object @string = 0;

Questo rende molto senso in termini di retrocompatibilità: è improbabile che molte persone hanno creato un tipo chiamato dynamic (che causerebbe l'ambiguità; IIRC del tipo "vero" vince in questo caso ) mentre è molto probabile che il codice esistente utilizza le variabili chiamato dynamic.

In un certo senso, non ha nemmeno bisogno di essere una parola chiave contestuale (e non credo che la specifica si riferisce mai esplicitamente come tale) - si può pensare ad esso come il nome di un tipo che è sempre disponibile (come string e object). Immagino che string etc sono state fatte le parole chiave da v1 per evitare confusione, ma l'aggiunta di parole chiave originali (che non possono essere utilizzati come identificatori) avrebbe un costo elevato compatibilità ora.

È una parola chiave. (vedi modifica sotto) Sono un po' confuso su cosa intendi con "perché 'int' non viene trattato allo stesso modo?"

Non puoi farlo: int int = 5;

Ma puoi farlo, anche se non è una buona pratica: int @int = 5;

IL Specifiche C# 4.0 menziona dynamic nella sezione 20.1.

MODIFICARE:Ulteriori informazioni...

È consentito utilizzare dinamica come nome di variabile, quindi non è una parola chiave (ma è una parola chiave contestuale - vedi Il post di Sean Devlin).Vedere lo screenshot seguente utilizzando .NET 4.0 beta

dynamic

Dai un'occhiata a Chris Burrow post sul blog.Una citazione interessante dal post:

Come puoi vedere, i membri pubblicamente visibili che usano il tipo dinamico effettivamente, dietro le quinte, usano l'oggetto tipo quando vengono emessi.Non esiste un tipo di framework "dinamico". Tuttavia, quegli "oggetti" sono tutti decorati in modo tale che il compilatore (o chiunque altro) possa dire che devono essere gestiti in modo dinamico.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top