【LINQの前に】ラムダ式?デリゲート?Func<T, TResult>?な人へのまとめ【知ってほしい】
ラムダ式を記述するとどうなるか
この投稿では 「デリゲートはメソッドを参照する型」 と述べてきました。そして匿名関数(匿名メソッド式・ラムダ式)を使えば、メソッドを作らなくてもインラインで処理を記述してデリゲートのインスタンスを生成できることを説明しました。
一見この二つは矛盾しているようにも見えます。匿名関数によりインラインで記述した処理はメソッドではないように見えるからです。
実際にはこれらは矛盾していません。デリゲートはメソッドを参照する型ですし、匿名関数(匿名メソッド式・ラムダ式)を使ってデリゲートを生成することが可能です。
それにはコンパイラが関係します。コンパイラは匿名関数を記述された場合、その匿名関数の記述に該当するクラスメソッドまたはインスタンスメソッド、もし必要であれば新たにクラスを生成します。匿名関数によるデリゲートは、これらのコンパイラが生成したメソッドを参照するデリゲートとして生成されるのです。