11

動的メンバー アクセスが期待する型を特定することはできますか? 私はもう試した

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

そして、TryGetMemberインターセプトGetMemberBinder.ReturnTypeにはどちらの方法でもオブジェクトがあります。また、変換を行うために呼び出される可能性があるかどうか疑問に思って実装TryConvertしましたが、ヒットすることはありません。

適切な変換を行うことができるように、呼び出し元が必要とする Type を特定できる、他に欠落しているオーバーライドはありますか?

4

1 に答える 1

10

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

ImpromptuInterfaceは、戻り値の型に基づいて変化する動的な実装が必要なため、異なることを行いますが、これらの行に沿っています。インターフェイスを介して動的オブジェクトを記述する必要があるだけです。

于 2011-08-12T21:54:30.903 に答える