C# の 'dynamic' キーワード…それは本当に RESERVED キーワードですか、それとも型として使用されるときに特別な意味を持つ単なる識別子ですか?

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

質問

C# 4.0 パーサーを持っています。タイプとしてキーワードとして「動的」を受け入れます。私のパーサーは、次の形式のc#3.0プログラムで見つかった声明を旅します。

dynamic = <exp> ;

では、動的というのは本当にキーワードなのでしょうか?それとも、任意の識別子名として引き続き使用できますか?(そうであれば、なぜ「int」が同じように扱われないのでしょうか)?

Dynamic がキーワードであるかどうかを示す参照仕様はどこかにありますか?最新の ECMA C# 4 仕様には「動的」についてさえ言及されておらず、MS サイトで見つけることができる最良のものは、キーワードが記載されている「暫定仕様」ですが、これは単なるいいかげんな書き方ではないかと思われます。

役に立ちましたか?

解決

dynamicは、C#4.0のように文脈キーワードです。 ECMA C#の仕様の第四版は、C#4.0を参照していません。 (2006年発行日に注意してください。)

MSDN にはキーワードとしてそれを説明しています。

これは、コンテキストキーワード表にもあります>。 (スクロールダウン)

他のヒント

これifなど、forのような "ノーマル" のキーワードではありません。

これyieldのようなのコンテキストのキーワード、fromなどです。

特に、このコンパイル

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

これはしません。

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

あなたはこのようstringを「エスケープ」する必要があると思います

object @string = 0;

これは、下位互換性の面で多くの意味を作る:それは多くの人々が曖昧さを引き起こすdynamic(呼ばれるの種類の作成しているとは考えにくいのですが、この場合にはIIRC「本物の」タイプの勝利を)に対し、それのの非常にの可能性が高いことdynamicと呼ばれるコードが使用する変数を既存ます。

それも(と私は仕様が今までそのように明示的にそれを参照信じていません)コンテンツキーワードである必要はありませんいくつかの点で

- あなたは常に利用可能である型の名前と考えることができます(stringobjectなど)。私は、V1からの回避の混乱へのstringなど行われたキーワードを想像するだろうが、(識別子として使用することはできません)本物のキーワードを追加すると、今の高い互換性のコストを持つことになります。

それはキーワードです。 (以下の編集を参照)「なぜ 'int' が同じように扱われないのですか?」という意味が少しわかりません。

これはできません: int int = 5;

良い習慣ではありませんが、これを行うことはできます。 int @int = 5;

C#4.0仕様 言及します dynamic セクション20.1に記載されています。

編集:より詳しい情報...

Dynamic を変数名として使用することは許可されているため、キーワードではありません (ただし、コンテキスト キーワードです - を参照してください)。 ショーン・デブリンの投稿)。.NET 4.0 ベータ版を使用した以下のスクリーンショットを参照してください。

dynamic

クリス・バロウの作品をチェックしてみよう ブログ投稿. 。投稿からの興味深い引用:

ご覧のとおり、タイプダイナミックを実際に使用する公開されているメンバーは、舞台裏で、それらが放射されるときにタイプオブジェクトを使用します。フレームワークタイプ「ダイナミック」はありません。ただし、これらの「オブジェクト」はすべて、コンパイラ(または他の人)が動的に処理されることを意図していることがわかります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top