Palabra clave 'dinámica' de C#... ¿es realmente una palabra clave RESERVADA o simplemente un identificador que significa algo especial cuando se usa como tipo?

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

Pregunta

Tengo un analizador C# 4.0.Acepta "dinámico" como palabra clave como tipo.Mi analizador se encuentra sobre las declaraciones que se encuentran en los programas de trabajo C# 3.0 de la forma de:

dynamic = <exp> ;

Entonces, ¿es realmente dinámica una palabra clave?¿O todavía se puede utilizar como un nombre de identificador arbitrario?(Si es así, ¿por qué no se trata 'int' de la misma manera)?

¿Existe alguna especificación de referencia en algún lugar que indique si dinámico es una palabra clave?La última especificación ECMA C# 4 ni siquiera menciona "dinámico", y lo mejor que puedo encontrar en el sitio de MS es una "especificación preliminar" que dice que es una palabra clave, pero sospecho que es una escritura descuidada.

¿Fue útil?

Solución

dynamic es una palabra clave contextual a partir de C # 4.0. La cuarta edición de la especificación ECMA # C no se refiere a C # 4.0. (Tenga en cuenta la fecha de publicación 2006).

MSDN lo describe como una palabra clave.

También en la tabla de palabras clave contextual >. (Desplazamiento hacia abajo.)

Otros consejos

No es una palabra clave "normal" como if, for etc.

Es un contextual palabra clave como yield, from etc.

En particular, esta compila:

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

Pero esto no:

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

tendría que string "escape" de esta manera:

object @string = 0;

Esto tiene mucho sentido en términos de compatibilidad con versiones anteriores: es poco probable que muchas personas han creado un type llamada dynamic (lo que causaría la ambigüedad; IIRC las victorias de tipo "real" en este caso ), mientras que de muy es probable que las variables utiliza el código existente llamado dynamic.

En cierto modo, no necesita ni siquiera ser una palabra clave contextual (y no creo que la memoria descriptiva se refiere a una manera explícita como tal) - se puede pensar que es el nombre de un tipo que siempre está disponible (como string y object). Me imagino que las palabras clave string etc. estaban hechas de V1 a evitar confusiones, pero la adición de palabras clave originales (que no se pueden utilizar como identificadores) tendría un alto costo de la compatibilidad ahora.

Es una palabra clave. (ver edición a continuación) Estoy un poco confundido sobre lo que quieres decir con "¿por qué 'int' no se trata de la misma manera?"

No puedes hacer esto: int int = 5;

Pero puedes hacer esto, aunque no es una buena práctica: int @int = 5;

El Especificaciones de C# 4.0 menciona dynamic en el apartado 20.1.

EDITAR:más información...

Se permite el uso de dinámico como nombre de variable, por lo que no es una palabra clave (pero es una palabra clave contextual; consulte Publicación de Sean Devlin).Vea la captura de pantalla a continuación usando .NET 4.0 beta

dynamic

Echa un vistazo a Chris Burrow entrada en el blog.Una cita interesante del post:

Como puede ver, los miembros públicos visibles que usan la dinámica tipo tipo, detrás de escena, usan el objeto tipo cuando se emiten.No hay un tipo de marco "dinámico". Sin embargo, esos "objetos" están decorados de tal manera que el compilador (o cualquier otra persona) puede decir que están destinados a ser manejados dinámicamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top