2011-08-12 9 views
10

ダイナミックメンバーのアクセスに予想されるタイプを判別することは可能ですか?私はDynamicObjectメンバーアクセスの予想されるタイプを確認する

dynamic foo = new MyDynamicObject(); 
int x = foo.IntValue; 
int y = (int)foo.IntValue; 

を試してみましたが、TryGetMemberインターセプトGetMemberBinder.ReturnTypeのいずれかの方法をオブジェクトでき​​ました。私もTryConvertを実装して、変換を行うために呼び出されるかどうか疑問に思っていますが、決して当てはまりません。

他のオーバーライドがありますが、私は適切な変換を行うために発信者がどのようなタイプを望んでいるかを判断できませんか?

答えて

9

C#では、ダイナミックを使用する場合、コンパイラーは常にバインダーをオブジェクトの型を返すように設定し、期待される戻り値の型への第2の動的暗黙的変換を行います。したがって、DynamicObjectをC#から呼び出すと、GetMemberBinder.ReturnTypeは常にオブジェクトになりますが、tryConvertで実装された別の種類のスプリングボード動的オブジェクトを返すと、その型を取得できるようになります。ただし、ユーザーがvar or dynamicを変数として使用する場合を除き、静的に型指定されるまでは何もしないプロキシがあります。

ImpromptuInterfaceは、これらの行とは異なりますが、リターンタイプに基づいて変更される動的実装を望んでいるため、インタフェースを介して動的オブジェクトを記述する必要があります。

関連する問題