1

動的がコンパイル時にオブジェクトに解決され、すべての .NET 型がオブジェクトを拡張する場合、IntelliSense に関して動的がオブジェクトのように動作しないのはなぜですか? 動的を使用するたびに、「動的式。これは実行時に解決されます」というメッセージが表示されます。オブジェクトメンバーも表示する必要がありますか?

4

3 に答える 3

4

インテリセンスは動的型では機能しません。実行時に解決されます。動的型は、静的型だけでなく匿名型にも使用できます。

インテリセンスが機能していたとしたら、動的性の目的そのものに反していたでしょう。

ここでジョンスキートの回答を読むべきだと思いobject vs dynamic ます

于 2012-07-02T08:19:43.830 に答える
1

これらのメンバーが提供されていないのではないかと思います。これは、任意の数のオーバーロードが任意のメソッドに存在する可能性があるためですobject。これは明らかにインテリセンス時に知ることができません。そのため、特定のメソッド呼び出しに対して誤ったIntelliSense 情報が表示される可能性があります。

于 2012-07-02T08:21:28.970 に答える
0

最終的には、すべての動的操作が動的ディスパッチを使用するため、つまりコンパイル時のリンクではなく、オブジェクトの動的レイヤーが自由にインターセプト/置換/削除できるため、メンバーが実際に存在するという保証はありませToStringん。の操作object。その結果、インテリセンス ウィンドウが何かを表示しようとするのは不誠実です。

はい、それは としてコンパイルされobjectますが、(ほぼ) すべてのオブジェクト objectそうである(またはそのようにボックス化できる) ため、ランタイムは、動的オブジェクトが何であれ、オブジェクト参照として保持できることを認識しています。

しかし、objectメンバーを使用したい場合、またはそれらを IntelliSense で表示したい場合は、object最初にキャストする必要があります。これは、それ自体が動的操作でもあります。

もちろん、動的言語のインテリセンス メンバーを表示できないと言っているわけではありません。

于 2012-07-02T08:22:20.117 に答える