メソッド呼び出しを記録する

ま、このネタはそこらじゅうで見かけることができる気がするが、せっかくなので書いてみよう。
事前にはっきり書いておくと、まともな説明にならない上に、すごく長い。
メールをくれた1名は読んでくれるかもしれないが、相当気合がないと読めないかもしれない。
まずは問題のコードであるが、

  Form1 = new MethodLogger( new Form1() ).GetTransparentProxy() as Form1;

というもので、Form1 と MethodLogger を生成しているのがわかる。
表面的には、この MethodLogger の実装は、

  public class MethodLogger
  {
    private object target;

    public MethodLogger(object target)
    {
      this.target = target;
    }

    public object GetTransparentProxy()
    {
        return this.target;
    }
  }

であると思って問題ないが、この内容では当然ながらメソッド呼び出しを記録することはできない。