Mono-1.1.9.1で自己パラメータ渡しのジェネリッククラス定義が可能になった

パラメータ型にサブクラスを指定するもの。それをインタフェースに出すためにキャストできるようにするもの。こういうの

public class ThisType<SubType> where SubType: ThisType<SubType> {
  public SubType Self() {
    return (SubType) this;
  }
}

public Sub : ThisType<Sub> {
  public string Hoge() { return "hoge"; }
}

public class Init {
  public static void Main() {
    Sub sub = new Sub();
    Sub ref = sub.Self();
    System.Console.WriteLine(ref.Hoge());
  }
}

1.1.8.3ではgmcsでのコンパイル自体だめだったけど、1.1.9.1ではコンパイル可能でうまく動くようになっている。