6

私は C# 4.0 パーサーを持っています。'dynamic' をキーワードとしてタイプとして受け入れます。私のパーサーは、動作中の C# 3.0 プログラムで見つかった次の形式のステートメントにトリップします。

dynamic = <exp> ;

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

dynamic がキーワードかどうかを示す参照仕様はどこかにありますか? 最新の ECMA C# 4 仕様では「動的」についても触れられておらず、MS サイトで見つけることができる最高のものは「予備仕様」であり、それがキーワードであると書かれていますが、それは単にずさんな書き方であると思われます。

4

3 に答える 3

10

dynamicは、C# 4.0 以降のコンテキスト キーワードです。ECMA C# 仕様の第 4 版は、C# 4.0 を参照していません。(2006 年の発行日に注意してください。)

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

このコンテキスト キーワードの表にもあります。(下へスクロール。)

于 2010-01-23T17:42:33.973 に答える
7

などのような「通常の」キーワードではありませんiffor

これは、などのコンテキストキーワードです。yieldfrom

特に、これはコンパイルします:

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

しかし、これはしません:

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

string次のように「エスケープ」する必要があります。

object @string = 0;

これは、下位互換性の観点から非常に理にかなっています。多くの人がと呼ばれるdynamicを作成する可能性は低いですが(あいまいさを引き起こす可能性があります。この場合、IIRCは「実際の」型が優先されます)、既存のコードはと呼ばれる変数を使用する可能性が非常にdynamic高いです。 。

いくつかの点で、それは文脈上のキーワードである必要さえありません(そして私は仕様がそれをそのように明示的に参照しているとは思わない)-あなたはそれを常に利用可能なタイプの名前と考えることができますstringobject)。混乱を避けるために、etcはv1からキーワードになっていると思いstringますが、本物のキーワード(識別子として使用できない)を追加すると、互換性のコストが高くなります。

于 2010-01-23T17:56:35.697 に答える
1

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

あなたはこれを行うことはできません:int int = 5;

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

C# 4.0 仕様dynamicでは、セクション 20.1 で言及されています。

編集:詳細...

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

動的

Chris Burrow のブログ投稿をご覧ください。投稿からの興味深い引用:

ご覧のとおり、タイプ dynamic を実際に使用する一般に公開されているメンバーは、出力時にタイプ オブジェクトを使用します。「動的」なフレームワーク タイプはありません。ただし、これらの「オブジェクト」はすべて、コンパイラー (または他の誰か) が動的に処理されることを意図していると判断できるように装飾されています。

于 2010-01-23T17:37:05.890 に答える