“ dynamic”の実際の使用とはC#4.0の変数?
質問
メソッドを呼び出すときに、メソッドが存在しない可能性がある場合の使用法は何ですか?
それは、動的オブジェクトにメソッドを動的に作成できるということですか?
これの実用的な用途は何ですか?
解決
実際にメソッドを動的に作成することはできませんが、 IDynamicMetaObject
の実装を取得して( DynamicObject
を拡張することで) asメソッドが存在する場合。
用途:
- 弱いAPI(例:office)を使用したCOMオブジェクトに対するプログラミング
- Ruby / Pythonなどの動的言語の呼び出し
- 「探索可能」にする可能性オブジェクト-XPathに似たクエリを想像してください。ただし、メソッド/プロパティ呼び出しを介して
document.RootElement.Person [5] .Name [" Attribute"]
- 間違いなく、まだ考えていないことがあります:)
他のヒント
まず、今は使用できません。これはC#4の一部であり、将来リリースされる予定です。
基本的には、実行時までプロパティがわからないオブジェクト用です。おそらく、COMオブジェクトに由来します。おそらく、「オンザフライで定義するオブジェクト」です。あなたが説明するように(私はそれらをまだまたは計画しているものを作成する機能はないと思うが)。
これはSystem.Objectに似ていますが、コンパイラが知らないメソッドを呼び出すことが許可され、ランタイムが呼び出す方法を見つけ出すことを除いて、です。
私が考えることができる2つの大きなポイントは、ダックタイピングと、 javascriptやPythonに似たアプリケーションでスクリプト言語としてC#を使用する能力です。最後の1つは、私を少し引き裂きます。
Reflectionの単純化された形式と考えてください。これの代わりに:
object value = GetSomeObject();
Method method = value.GetType().GetMethod("DoSomething");
method.Invoke(value, new object[] { 1, 2, 3 });
これを取得します:
IDynamicObject value = GetSomeObject();
value.DoSomething(1, 2, 3);
いくつかの動的ORMフレームワークが作成されているのがわかります。または、自分で書いてください。
Jon Skeetに同意します。オブジェクトを探索するいくつかの興味深い方法があります。 たぶんjQueryのようなセレクターが必要です。
COMの呼び出しと動的言語の呼び出し。
Rubyのようなmissing_methodを実行する方法があるかどうかを楽しみにしています。