'Динамическим' ключевым словом C# … это является действительно Зарезервированное слово или просто идентификатор, который означает что-то специальное при использовании в качестве типа?

У меня есть синтаксический анализатор C# 4.0. Это принимает 'динамичный' как ключевое слово как тип. Мой синтаксический анализатор спотыкается за операторы, найденные в рабочих программах C# 3.0 формы:

dynamic = <exp> ;

Так, это динамичный действительно ключевое слово? Или это может все еще использоваться в качестве произвольного имени идентификатора? (Если так, почему 'интервал' не рассматривают тот же путь)?

Существует ли ссылочная спецификация где-нибудь, которая указывает, является ли динамичный ключевое слово? Последняя спецификация ECMA C# 4 даже не упоминает 'динамичный', и лучшее, которое я могу найти на сайте MS, "предварительная спецификация", которая говорит, что это - ключевое слово, но я подозреваю, что это - просто неаккуратная запись.

6
задан AndreyAkinshin 23 February 2010 в 11:11
поделиться

3 ответа

Dynamic - это контекстное ключевое слово, поскольку C # 4.0. Четвертое издание спецификации ECMA C # не относится к C # 4.0. (Примечание Дата публикации 2006 года.)

MSDN описывает его как ключевое слово.

Это также в этом таблица контекстных ключевых слов . (Прокрутите вниз.)

10
ответ дан 8 December 2019 в 12:59
поделиться

Это ключевое слово. (см. Редактирование ниже) Я немного запутался на то, что вы подразумеваете под «Почему нет« int »относится к тому же способу?»

Вы не можете сделать это: INT INT = 5 ;

Но вы можете сделать это, хотя это не очень хорошая практика: int @int = 5;

Спецификация C # 4.0 упоминается Dynamic в разделе 20.1. Отказ

Редактировать: дополнительная информация ...

Использование Dynamic Как разрешено имя переменной, так что это не ключевое слово (но это контекстное ключевое слово - см. Сообщение Шон Девлина ). Смотрите скриншот ниже, используя .NET 4.0 Beta

dynamic

Посмотреть сообщение в блоге Chris Burrow . Интересная цитата с поста:

, как вы можете видеть, общедоступный Члены, которые используют тип динамики на самом деле, за кулисами, используйте Тип объекта, когда они испускаются. Там нет структуры типа «динамика». Тем не менее, эти «объекты» все украшен таким образом, что компилятор (или кто-либо еще) может сказать что они должны быть обработаны динамично.

1
ответ дан 8 December 2019 в 12:59
поделиться

Это не «нормальное» ключевое слово , если , для и т. Д.

Это а Conturectual Ключевое слово, подобное , выходу , , из и т. Д.

, в частности, это компилирует:

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

, но это не:

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

, вам нужно «Escape» string , как это:

object @string = 0;

Это имеет большое значение с точки зрения обратной совместимости: маловероятно, что многие люди создали тип , называемый динамическими (который вызвал бы двусмысленность; IIRC «реальный» выигрывает в этом случае), тогда как это очень , вероятно, что существующий код использует переменные, называемые динамическими. .

В некоторых отношениях даже не нужно быть контекстуальным ключевым словом (и я не верю, что спецификация явно относится к этому как таковой) - вы можете думать об этом как о имени типа, который всегда доступен (Как и строка и объект ). Я бы представлял, что String ETC были предприняты ключевые слова из V1, чтобы избежать путаницы, но добавление подлинных ключевых слов (которые нельзя использовать в качестве идентификаторов), будет иметь высокую стоимость совместимости сейчас.

7
ответ дан 8 December 2019 в 12:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: