4

私は最近 Code Camp 12 に参加しました。講演者はdynamic、C# 4.0 の新しいキーワードは動的言語との相互運用にのみ使用する必要があると述べました。通常の反射(反射自体がやや遅い)に比べてやや遅いとも言っていたと思います。

しかしその後、Scott Hanselman がダイナミックなキーワードは「リフレクションの苦痛を軽減する」と述べているのを聞きました。

それでは、動的コードに由来しないオブジェクトを反映する目的で dynamic キーワードを使用することは許容されるのでしょうか?

4

5 に答える 5

7

私は「いいえ」と言うでしょうが、めちゃくちゃに使い始めないでください。実際にdynamicは、私がベンチマークしたことから、(常にリフレクションを使用するのではなく) デリゲートを保持しているため、基本的なリフレクションよりも高速Invokeです。具体的には、次の 2 つの強みがあります。

  • ジェネリックメソッドの呼び出し(MakeGenericMethodなどはとても苦痛です)
  • オペレーターの呼び出し

ただし、インターフェイスなどで必要なことを行う方法があります。dynamic非動的型では、実際にはダックタイピングになります。これは、非常に限られた一連のシナリオで役立ちます。主に: インターフェイスが優先されます。それらを除外しないでください。

の欠点dynamicは、(非常識なコードを書かずに)有用であるためには、コンパイル時に名前を知る必要があることです。多くの場合、そうではありません。実行時に名前しかわからない場合は、高速な方法でデータにアクセスするための他のオプション ( ExpressionDelegate.CreateDelegate「HyperDescriptor」など) があります。DynamicMethod

于 2009-10-26T16:40:36.383 に答える
2

答えは、動的キーワードは相互運用用であるが、動的言語相互運用用だけではないということです。COM相互運用機能はほんの一例です。C#チームは、この機能を使用するようにCOM相互運用機能を既に変更しており、これにより相互運用機能がはるかに簡単になりました。最近、ASP.NETMVCビューが同様のことをしているのを見ました。

また、動的キーワードの別の使用例を示す例を投稿しました: C#4.0での動的:DynamicObjectを使用したラッパーの作成。これらはまさにFreedが話していた例のタイプです:XMLデータとの相互運用を単純化します。

于 2009-10-28T19:35:45.697 に答える
1

私は「いいえ」と言わなければならないでしょう。あまり期待されていない使用例については、http://haacked.com/archive/2009/08/26/method-missing-csharp-4.aspxを参照してください。

dynamicキーワードは、COMと動的言語の操作をはるかに簡単にすることを明確に意図したものですが、それはそれらの領域に限定する必要があるという意味ではありません。パフォーマンスに関する限り、それを念頭に置いてください。ただし、パフォーマンスの問題が発生するまで、それに集中しないでください。(これは、開始する前にパフォーマンスを低下させる可能性のある高レベルの設計の選択に影響を与える可能性が非常に低い、低レベルの詳細の1つです。)

編集

また、優れた言語設計者なら誰でも、人々が予期しない方法で言語機能を使用するという事実を認識しています。彼らは動的な振る舞いを可能にするインターフェースを作ったので、これはこの議論に特に関係があります。彼らは意図的に人々が「動的な」キーワード機能にほとんど何でもフックすることを可能にしました。

于 2009-10-26T14:15:48.687 に答える