2

本 (主要なもの) を説明するだけで、ラムダ式の定義の 1 つが私の目を引きました。

ラムダ式は、デリゲート インスタンスの代わりに記述された名前のないメソッドです。

デリゲートインスタンスの代わりに???

デリゲート インスタンスは、ターゲット メソッドを参照/カプセル化するオブジェクトです。

次のサンプルでは、​​右側 (ラムダ式がある場所) はデリゲート インスタンスではありません。それは方法です。

TransformerDelegate t = SquareMethod;

したがって、定義は次のように修正/言及する必要があります。

ラムダ式は、デリゲート変数によって参照されるメソッド(!)の代わりに記述された名前のないメソッドです。

TransformerDelegate sqr = x => x * x;
                              ^
                              |
               ---------------+
               |

            this is the location for method/anonymous methods.

私が何を意味するか分かりますか?私は正しいですか?

ps 私msdn のものを理解しました : (しかし、本が間違いを犯したかどうかを確認したい)

ラムダ式は、式とステートメントを含めることができる無名関数であり、デリゲートまたは式ツリー型の作成に使用できます。

4

3 に答える 3

4

ラムダ式の値はデリゲートインスタンスです。

したがって、本はおそらく次のようなコードを参照しています。

MySquareDelegate f1 = x => x * x;
MySquareDelegate f2 = new MySquareDelegate(MySquareMethod);
MySquareDelegate f3 = MySquareMethod;  // just shorthand for the previous line

1 文で説明するのは難しいことです。独自のバージョン

ラムダ式は、デリゲート変数によって参照されるメソッド(!)の代わりに記述された名前のないメソッドです。

メソッドが暗黙的にデリゲート インスタンスに変換される「メソッドの代わりのメソッド」について話しています。どちらも少なくとも不完全に見えます。

ラムダの定義には、それがインラインメソッドであることも含める必要があります。

于 2012-12-20T12:58:08.547 に答える
0

基本的にデリゲートは、特定のメソッドを呼び出す方法を知っているオブジェクトに他なりません。したがって、デリゲートインスタンスは文字通り、呼び出し元のデリゲートとして機能します。呼び出し元がデリゲートを呼び出し、デリゲートがターゲット メソッドを呼び出します。

于 2012-12-20T13:00:16.517 に答える