Visual Studio 2008

Visual C# 2008 Expressを使って見ました。なかなか意欲的な新機能があるようです。単純な匿名メソッドをより単純に記述できるラムダ式・パイプライン対応のフィルタリング処理を実現してくれる標準クエリ演算子・フィルタリング処理をデータベースSQL構文に見せるシンタックスシュガーであるところの.NET統合言語クエリ(LINQ)・既存の型にメソッドを後付けする拡張メソッドに興味を持ちました。

Visual Studio 2005で追加されたyieldがフィルタリングをパイプライン化するのに利用され、ジェネリックが様々な型に標準クエリ演算子を適用するのに利用され、また新機能の拡張メソッドがNetFramework
2.0に手を加えずに既存クラスを標準クエリ演算子対応するために利用されています。このように緻密な計画に基づいて開発されたことに感心します。

LINQをSQL代替機能と見た場合、SELECT・INSERT・DELETE・UPDATEの内、SELECTに対応するものしか実現できません。そこで集合演算を一文でやってくれるものではなく、フィルタリングの標準的機能を提供してくれていると捉えています。

拡張メソッドは第一引数に指定されている型のメンバにそのメソッドが含まれているかのように振舞うものです。そのため既存の型にメソッドを後付けすることができます。Objectクラスの拡張メソッドInspectを書けばすべての型でInspectが使えるようになります。但し本来のメソッドと同名の拡張メソッドを作って機能を置き換えることはできません。拡張される型はクラスに限らずインタフェースも指定でき、Where・SelectなどもIEnumerable<T>の拡張メソッドとして実装されています。インタフェースを実装する型は拡張メソッドを実装する必要がなく、インタフェース内で完結する処理を拡張メソッドにすれば委譲コードを減らすことができます。

Visual Basicは2005に引き続きyieldと匿名メソッドが導入されませんでした。C#との色分けははっきりしたようです。業務アプリケーションでは標準クエリ演算子でパイプライン対応のフィルタリング処理ができればyieldは要らないでしょうし、匿名メソッドが欲しくなる局面はそれほどありません。しかしライブラリ開発ではyieldや匿名メソッドがないと遠回しな記述になったりすることがあります。これからはライブラリ開発をC#で行うことも考えています。