1

根据我的理解,我将 Func 委托的含义解释如下。请在需要时更正它们。

Declaration : Func<int> dg ;

1. 我可以将其解释为“一个代表指向一个返回整数的方法吗?”。

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

*2。我可以将其解释为“'r' 是一个 lambda 表达式,它本身是一个整数类型的参数,被评估为 '2 * r' 并返回一个 int?.*

Comparison : Delegate and lambda expression

3. 如果 Delegates 和 lambdas 都作为函数指针工作,有什么不同?

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”不是 lambda 表达式。"r" 使用了两次,第一次是声明lambda 表达式的形式参数,第二次是作为该 lambda 表达式主体的一部分。但“r”不是 lambda 表达式。lambda 表达式是“r=>2*r”

3) Lambda 和委托是不同的东西。lambda 是“做某事的函数”的抽象概念。委托类型是事物类型的抽象概念,它是接受和返回某些类型的方法。特定的委托是对此类方法的引用。lambda 可以转换为兼容的委托类型,如果这样做,在运行时,您将获得一个委托实例。但是 lambda 也可以转换为其他东西,比如表达式树。

4)它们的目的不同。表达式树是表示lambda 中提到的计算的对象。委托是一个实际执行lambda 中提到的计算的对象。

于 2009-10-19T23:28:09.327 回答
1

代表和表达式不是一回事。委托是对方法的强类型引用,而表达式是可被视为数据的代码的内存表示。可以将表达式编译为 IL(Expression.Compile方法),这将为您提供该新编译方法的委托。

请记住,表达式可以转换为委托,但委托只是委托。

于 2009-10-19T23:08:45.740 回答