1

私の理解に基づいて、Funcデリゲートの意味を次のように解釈します。必要に応じて修正してください。

Declaration : Func<int> dg ;

1. 「整数を返すメソッドを指しているデリゲート」と解釈できますか?

Declaration : Func<int,int> delg1=r=>2*r;

*2. 「'r' は、それ自体が '2 * r' として評価される整数型のパラメーターであり、int を返すラムダ式であると解釈できますか? .*

Comparison : Delegate and lambda expression

3.デリゲートとラムダの両方が関数ポインタとして機能している場合、どこが違うのですか?.

Comparison : Are the following two declarations equal?

decl 1 : Func<int,int> fn=(r)=>45*r;

decl 2 : Expression<Func<int,int>> ex = (r) => r * 10;

4. 上記の構成要素の両方が同じ目的で機能している場合、どこが違うのですか?.

4

2 に答える 2

7

1) はい。ただし、「引数を取らず、整数を返すメソッドを参照するデリゲート」と言う方がより正確で正確です。

2)いいえ。「r」はラムダ式ではありません。"r" は 2 回使用されます。1 回目はラムダ式の仮パラメーターを宣言するため、2 回目はそのラムダ式の本体の一部として使用されます。しかし、「r」はラムダ式ではありません。ラムダ式は "r=>2*r" です

3) ラムダとデリゲートは別のものです。ラムダは、「何かを行う関数」の抽象的な概念です。デリゲート型は、特定の型を取り、返すメソッドであるものの型の抽象的な概念です。特定のデリゲートは、そのようなメソッドへの参照です。ラムダは互換性のあるデリゲート型に変換できます。変換すると、実行時にデリゲート インスタンスが取得されます。ただし、ラムダは、式ツリーなど、他のものにも変換できます。

4) それらは同じ目的を果たしません。式ツリーは、ラムダで言及されている計算を表すオブジェクトです。デリゲートは、ラムダで言及されている計算を実際に実行するオブジェクトです。

于 2009-10-19T23:28:09.327 に答える
1

デリゲートと式は同じものではありません。デリゲートはメソッドへの厳密に型指定された参照ですが、式はデータとして扱うことができるコードのメモリ内表現です。式は IL (Expression.Compileメソッド) にコンパイルできます。これにより、新しくコンパイルされたメソッドへのデリゲートが提供されます。

式はデリゲートに変換できますが、デリゲートは単なるデリゲートであることを覚えておいてください。

于 2009-10-19T23:08:45.740 に答える