gmcsでGenerics

今回から使えるようになったGenericsをテスト。Genericsを試すだけの実験君なのでつまらないですが。
ファイル:gmcs_1st.cs

using System;

interface IFoo<T> {
    void Method<V>(V v);
}

class Foo<T> : IFoo<T> {
    public void Method<V>(V v) {
        Console.WriteLine("{0}.Method({1})", GetType(), v);
    }
}

class Bar<T, U> where U: IFoo<T>, new() {
    T  t;
    U  u;
    public void Method<V>(V v) where V:struct {
        t = default(T);
        if (t == null) 
            Console.WriteLine("{0} is a class.", typeof(T));
        u = new U();
        u.Method(v);
    }
}

class Baz {}

class Program {
    public static void Main() {
        Bar<Baz, Foo<Baz>> bar = new Bar<Baz, Foo<Baz>>();
        bar.Method(0xffff);
    }
}

コイツをgmcsでコンパイル

> gmcs gmcs_1st.cs
BETA SOFTWARE: Mono C# Compiler 1.1.2.0 for Generics
Compilation succeeded

for Genericsが素敵。(^^;

で、実行してみると、

Baz is a class.
Foo`1[Baz].Method(65535)

ちゃんと動作しますね。