Когда ключевые слова C # не зарезервированы? - PullRequest
8 голосов
/ 02 декабря 2010

Я просто безрассудно использовал from в качестве идентификатора.

Я понимаю, что можно использовать @ для экранирования имен идентификаторов и поэтому использовать зарезервированные слова, но я не понимаю, почему в этом случае я не получил ни предупреждения, ни ошибки.

У меня нет желания использовать зарезервированные слова ни для чего, кроме их предназначения, но я не хочу повторять подобную ошибку снова и хотел бы узнать обоснование наличия ключевых слов языка, которые не зарезервированы при определенных обстоятельствах.

Ответы [ 6 ]

13 голосов
/ 02 декабря 2010

Некоторые ключевые слова зарезервированы только в определенных контекстах, например, partial в partial class.

См. "Контекстные ключевые слова" в разделе этой темы в MSDN .

4 голосов
/ 02 декабря 2010

Команда C # специально старается избегать создания новых зарезервированных ключевых слов на языке. Любое добавленное новое ключевое слово означает, что оно автоматически ломает существующий код, который использовал это ключевое слово в качестве идентификатора. Следовательно, когда это возможно, C # будет использовать контекстное ключевое слово, чтобы минимизировать или исключить возможность взлома существующего кода.

Контекстное ключевое слово - это ключевое слово, которое используется только в определенном контексте, таком как from, partial, var и т. Д. Этот контекст не включает идентификаторы:)

Я не верю, что было добавлено новое ключевое слово с C # 2.0 (даже не уверен, что 2.0 добавило одно)

3 голосов
/ 02 декабря 2010

из является «контекстным ключевым словом». Многие из них в C # ведут себя как ключевые слова, только когда они используются в определенном контексте. Большим преимуществом является то, что добавление такого контекстного ключевого слова в язык не нарушит существующий код.

Вы найдете их во 2-й таблице на этой странице MSDN . Да, из есть.

2 голосов
/ 02 декабря 2010

Они не зарезервированы , когда они контекстные ( MSDN-ссылка ):

Контекстное ключевое слово используется для дать конкретное значение в код, но это не зарезервированное слово в C #. Некоторые контекстные ключевые слова, такие как частичное и где есть специальные значения в двух или более контекстах.

1 голос
/ 02 декабря 2010

Чтобы ответить на основной вопрос:

Все ключевые слова, добавленные после C # 1, являются контекстными. Это позволяет избежать критических изменений.

Почти все ключевые слова C # 1 зарезервированы, кроме ключевых слов доступа (add, remove, get и set).

0 голосов
/ 02 декабря 2010

Большинство ключевых слов C # всегда зарезервированы. Некоторые, как вы узнали, зарезервированы только в некоторых контекстах. Они называются контекстными ключевыми словами. Я считаю, что это способ улучшить обратную совместимость.

Причина в том, что from было совершенно приемлемым именем переменной в C # 2. C # 3 добавил LINQ, и им нужны были ключевые слова для него. Чтобы обеспечить максимальную совместимость, from было добавлено в качестве контекстного ключевого слова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...