2010-12-02 15 views
8

Me encontré distraídamente usando from como identificador.¿Cuándo no se reservan las palabras clave C#?

Me doy cuenta de que es posible utilizar @ para escapar de los nombres de los identificadores y, como tal, utilizar palabras reservadas, pero no entiendo por qué en este caso no recibí ninguna advertencia o error.

No deseo utilizar palabras reservadas para nada que no sea su propósito, pero no quiero volver a cometer un error similar y me gustaría saber la razón detrás de tener palabras clave de lenguaje que no están reservadas en ciertas circunstancias.

+2

se agregaron algunas palabras clave después de que se haya escrito una gran cantidad de código, como la palabra clave 'from' de Linq. Podría romper un montón de código existente si fuera imposible de usar. Además, como se mencionó, algunas palabras clave solo se encuentran en ciertos contextos. – Pedro

+0

Para obtener un análisis de las diversas reglas para cuando las palabras clave tienen un significado particular, consulte http://blogs.msdn.com/b/ericlippert/archive/tags/keywords/ –

Respuesta

13

Algunas palabras clave solo se reservan en determinados contextos, por ejemplo, partial en partial class.

Consulte las "palabras clave contextuales" en this topic on MSDN.

+0

Así aparecería, pero ¿cuál es el fundamento y dónde está? documentado en la especificación? – PeterT

+0

+1 Exactamente. El analizador puede distinguir entre 'var from = ...' y 'var q = from ...'. – StriplingWarrior

+3

La razón de ser está en el enlace de MSDN que publiqué; citar: "Generalmente, a medida que se agregan nuevas palabras clave al lenguaje C#, se agregan como palabras clave contextuales para evitar romper programas escritos en versiones anteriores". –

2

No son reservados cuando están contextual (MSDN link):

Una palabra clave contextual se utiliza para proporcionan un significado específico en el código , pero no es una palabra reservada en C#. Algunas palabras clave contextuales, como parcial y where, tienen significados especiales en dos o más contextos.

4

El equipo de C# trata específicamente de evitar la creación de nuevas palabras clave reservadas en el idioma. Cualquier nueva palabra clave agregada significa que se rompe automáticamente el código existente que usó esa palabra clave como identificador. Por lo tanto, siempre que sea posible, C# usará una palabra clave contextual para minimizar o eliminar la posibilidad de romper el código existente.

Una palabra clave contextual es uno que sólo es una palabra clave cuando se utiliza en un contexto específico, como from, partial, var, etc ... Ese contexto no incluye identificadores :)

no creo que ha habido un nueva palabra clave agregada desde C# 2.0 (ni siquiera estoy seguro de que 2.0 haya agregado una)

3

de es una 'palabra clave contextual'. Muchos de los que están en C#, solo se comportan como una palabra clave cuando se usan en un contexto determinado. La gran ventaja es que agregar tal palabra clave contextual al idioma no romperá el código existente.

Los encontrará listados en la 2da tabla en este MSDN page. Sí, de está allí.

0

La mayoría de las palabras clave C# siempre están reservadas. Algunos, como descubriste, solo están reservados en algunos contextos. Se llaman palabras clave contextuales. Creo que esta es una forma de garantizar mejor la compatibilidad con versiones anteriores.

El razonamiento es que from era un nombre de variable perfectamente aceptable en C# 2. C# 3 agregó LINQ, y necesitaban palabras clave para ello. Para mantener la compatibilidad máxima, se agregó from como palabra clave contextual.

1

Para responder a la pregunta fundamental:

Todas las palabras clave añadidas después de C# 1 son contextuales.Esto evita romper los cambios.

Casi todos los C# 1 palabras clave son reservados, a excepción de palabras clave de descriptor de acceso (add, remove, get y set).

Cuestiones relacionadas