Microsoft.NET SDK 2.0 Beta1

入れました。C#では、Generic Type使えるようになってますね。

using System;

class MyClass {
  private MyType o;
  public MyClass(MyType o) {
    this.o = o;
  }
  
  public MyType Get() {
    return o;
  }
  
  public M MyMethod(M m) {
    return m;
  }
}

public class MainClass {
  public static void Main(string[] args) {
    MyClass m = new MyClass("hoge");
    string v = m.Get();
    Console.WriteLine(v);
    
    int i = 0;
    i = m.MyMethod(i);
    Console.WriteLine(i);
  }
}

Generic TypeにMainが置けないのは仕様らしい。

また、パラメータタイプには親クラスをwhereで指定できる。さらに親タイプには自分やパラメータタイプも指定可能(ただし、templateではないので、自分のクラスは自身のパラメータタイプ*1を親にはすることはできません)

class MyClass2: ContextBoundObject 
  where MyType : MyClass2 // どう具体化するのかな?
  where MyType2 : MyType {
  private MyType o;
  public MyClass2(MyType o) {
    this.o = o;
  }
  
  public MyType Get() {
    return o;
  }
  
  public M MyMethod(M m) where M : ContextBoundObject {
    return m;
  }
  
}


あとC#としては、Pythonのyieldのようなyield文や、delegateという匿名メソッドオブジェクト(JavaScriptでのfunctionのようなもの)、partialで指定する分割クラス(1つのクラスの複数のファイルに分割して書ける機能)などあるらしいので、試してみたい。

Framework v2.0のマニュアルって、オンラインではどこにあるのだろうか*2

*1:パラメータつきタイプのことではなくて<>の中にあるタイプのこと

*2:.NET SDK 2.0 Beta1オンラインドキュメント: http://lab.msdn.microsoft.com/library/