C# 3.0

http://blogs.wankuma.com/naka/archive/2005/09/14/18352.aspxより。

C# 2.0が出てもいないのに、3.0が熱い。http://download.microsoft.com/download/9/5/0/9503e33e-fde6-4aed-b5d0-ffe749822f1b/csharp%203.0%20language%20enhancements%20hands%20on%20lab.docを見る限り、C#3.0の目玉は、

  1. Using Implicitly Typed Local Variables
  2. Extending Types with Extension Methods
  3. Working with Lambda Expressions
  4. Using Lambda Expressions to Create Expression Trees
  5. Easy Initialization with Object and Collection Initializers
  6. Using Anonymous Types
  7. Understanding Queries and Query Expressions

といった感じ見たい。

1はローカル変数の宣言が初期化を伴う場合に、型宣言が不要になるというもの。右辺がリテラルだと嬉しくないだろうけど、複雑なクラス名をnewしてる場合とかには嬉しいのかも。

2は既存のクラスにメソッドを追加できる感じ?よくわからない。直感的には、むちゃくちゃな機能に見える。C#のデザイナもyieldの導入辺りからぶっ壊れてきたか。

3はλ式。匿名delegateのsyntaxを簡潔にして、パラメータの型宣言を省略できるみたい。

x => x + 1

とか書けるらしい。オーバーローディングがあるので、すなおに型推論できない気がするけど、どうなってるんでしょ。

4,5はよくわからないので省略。

6は匿名型ということで、Javaの無名クラスを思いつくが、そういう感じなんだろうか。感じ的には、OCamlなんかのobject式に近いと思う。

new {x = 1.2; y=3};

とか書けるようになるらしい。これ、メソッドの宣言もできたらかっこいいのだが。λ式を書けばいいんかな?でも変数のスコープが問題になりそう。Tupleみたいに使えばいいんだろうか。

7はよくわからない。

決定不能問題に足を突っ込んでそうに見える機能がいっぱいあるように見えるけど、落ち着いて考えれば大丈夫なんだろうか。まじめに読んでもないので、わかりません。明日印刷して読もうと思った。

ついでに、マルチメソッドかVariant型が欲しいと思った。