匿名函数转换-大彩串口屏各组态控件详细介绍

时间:2024-06-28 03:33:30
【文件属性】:

文件名称:匿名函数转换-大彩串口屏各组态控件详细介绍

文件大小:4.46MB

文件格式:PDF

更新时间:2024-06-28 03:33:30

C#5.0 PDF C#学习

6.5 匿名函数转换 anonymous-method-expression 或 lambda-expression 被归类为匿名函数(第 7.15 节)。这个表达式没有类 型,但是可隐式转换为兼容的委托类型或表达式目录树类型。具体而言,匿名函数 F 与委托类型 D 兼容:  如果 F 包含 anonymous-function-signature,则 D 与 F 的形参个数相同。  如果 F 不包含 anonymous-function-signature,则 D 可以有零个或多个任意类型的形参,只要 D 的任 何形参都没有 out 形参修饰符。  如果 F 具有显式类型化形参列表,则 D 中的每个形参与 F 中的对应形参具有相同的类型和修饰符。  如果 F 具有隐式类型化形参列表,则 D 没有 ref 或 out 形参。  如果 F 的主体是一个表达式且 D 具有 void 返回类型,或 F 是异步的且 D 具有返回类型 Task,则将 F 的每个参数均指定为 D 中对应参数的类型时,F 的主体是有效表达式(请参考第 7 章),该表达 式将允许作为 statement-expression(第 8.6 节)。  如果 F 的主体是一个语句块且 D 具有 void 返回类型,或 F 是异步的且 D 具有返回类型 Task,则将 F 的每个参数均指定为 D 中对应参数的类型时,F 的主体是有效语句块(请参考第 8.2 节),在该语 句块中没有 return 语句指定了表达式。  在 F 的函数体为表达式时,如果 F 为非异步且 D 具有非空返回类型 T,或 F 为异步且 D 具有返回类 型 Task,则将 F 的每个参数均指定为 D 中对应参数的类型时,F 的函数体是有效表达式(请参 考第 7 节),该表达式可隐式转换为 T。  在 F 的函数体为语句块时,如果 F 为非异步且 D 具有非空返回类型 T,或 F 为异步且 D 具有返回类 型 Task,则将 F 的每个参数均指定为 D 中对应参数的类型时,F 的函数体是一个带有不可到达 的结束点的有效语句块(请参考第 8.2 节),在该语句块中每个 return 语句都指定一个可隐式转 换为 T 的返回类型的表达式。 为简洁起见,本节使用任务类型的简写 Task 和 Task(第 错误!未找到引用源。 节)。 如果 F 与委托类型 D 兼容,则 lambda 表达式 F 与表达式树类型 Expression 兼容。注意,这一点 不适用于匿名方法,而仅适用于 lambda 表达式 某些 lambda 表达式不能转换为表达式树类型:即使存在转换,该过程也会在编译时失败。lambda 表达 式符合以下条件时发生上述情况:  具有 block 体  包含简单或复合赋值运算符  包含动态绑定表达式  是异步的 下面的示例使用一个用于表示函数的泛型委托类型 Func,该函数采用一个类型为 A 的实参并返 回一个类型为 R 的值: delegate R Func(A arg); 在下面的赋值中, Func f1 = x => x + 1; // Ok


网友评论