1

これについては、タイトルはかなり自明です。

明確にするために: 私は動的な式を使用してかなり完全な言語インフラストラクチャを構築し、アセンブリを出力してみるのはクールだろうと考えました。これを行った経験のある人なら誰でも、「LambdaExpression.CompileToMethod」では動的式を CallSite<> に変換し、式が後でアクセスできるプライベート フィールドに割り当てる必要があることを知っています。

私はいくつかのテスト プロジェクトでこれを行うことに成功しましたが、すべて (つまりすべて) のコードをリファクタリングする前に、フォールバック プロセス中に作成されたバインダー インスタンスに対して同じことを行う必要があるかどうかを知る必要があります。

protected override void FallbackInvoke(DynamicMetaObject target, DynamicMetaObject[] args, DynamicMetaObject errorSuggestion) { 
    // If I make a DynamicExpression here, does it need to be a CallSite<> ? 
    // Or since it's inside the context of an executing delegate (CallSite<>), 
    // is it considered "Live" ? 
} 

また、「Expression.Constant」を使用すると、メソッドにコンパイルするときに制限があります。その制限はバインダー内にも存在しますか、それとも「ランタイム」および「安全」と見なされますか。

4

1 に答える 1

0

さて、いくつかのテストの後。はい、安全です。フォールバック中に作成された DynamicExpressions は、CallSite<> に変換する必要はありません。ただし、元の式のすべての DynamicExpressions がそうであることに注意してください。

于 2014-11-20T23:43:48.047 に答える