そもそも this とは

なんて見出しをつけるほどの、たいしたことを書くつもりではないのですが、stub の Invoke() は、メソッド解決が完了していないままに呼び出されます。*1
RemotingServices.ExecuteMessage() は、メソッド解決から呼び出しまでを一手に引き受けてくれますが、最終的なメソッド呼び出しに使われる this は、引数で渡している target です。
リクレクションによるメソッド呼び出しでも、対象となるオブジェクトを渡してメソッドを呼び出します。


ということは、this となるべきオブジェクトとして、target のかわりに proxy を渡すと何が起こるでしょうか?
前回の Increment() に対し、this が proxy であったら、proxy.Add() の呼び出しを記録することができます。
Clone() に対して this を proxy とできたなら、Clone() の戻り値が proxy となるため、以後のメソッド呼び出しの記録を行うことができます。


実際に、class はデータとロジックを保持しているにすぎないため、this が proxy となれば、すべてのメソッド呼び出しを記録し、stub の FieldGetter, FieldSetter によってデータの入出力が行われることで、すべてのメソッドの実装は正しく動くことが期待されます。

では、実験してみよう

もうだめ、・・・おやすみなさい。

*1:proxy なんだから当然といえば当然