1语法:
(输入参数)=>表达式
( 输入参数 )=> 表达式
存在的意义:
比如定义一个u8 num;的变量。那num只能赋值u8类型的数据。
如果赋值(方法)呢!使num能赋值方法类型而不是u8类型。这时莱姆达就来了。delegate委托建的变量可以接受方法类型,赋值的时候没必要每次都new方法,因为多数情况这方法只用一次,所以直接写方法( ),如果有参数的话就加参数(参数1,参数2,参数3),有了方法后,是不是还要有方法体,就不需要new了直接用莱姆达新建出方法体 => { }
这样在 { } 花括号里就可以添加语句了。
(参数1,参数2,参数3,参数4) => { 语句1; 语句2; 语句n; }
参数1 => 语句1; // 这种是语法糖简写
//======================================
莱姆达的作用:
方法的参数是对象或者值类型, 要是参数的类型,是方法,怎么办?
函数的参数是方法类型怎么办呢?
void run ( 方法 ff );
这类型是不是想不出来?
我们回顾一下,方法是怎么写的 void main ( void){ .... };
无名无参无返回怎么写?
()
{
语句1;
语句2;
}
我们已经知道委托类型delegate可以解决参数入口传方法的问题。
我们在写程序的时候都是先写好方法,然后再调用。
但我现在,正在写程序的时候就要调用方法,这种和尚要老婆的急事怎么办?
那就赶紧生个老婆出来,对,程序就是这么干的。一般这老婆就用一次,是一次性的(比如plc上电,后面我就再也用不到这个方法了)
这种一次性的方法,你给她起名字,已经没有意义了。 比如 delay_ms(10); 这种有名字的方法,你肯定是下次还想调用它,再延时10毫秒。
这种无名的方法 就是括号的左边没有名字 ()
有了无名方法,你想给她传参数怎么写?
当然和我们平时调用方法的习惯一样,在括号内直接填参数 ( 参数1,参数2,参数3 )
如果参数只有一个,那括号都可以懒的写了,直接省略 参数1 =>{ 语句; }
那方法体怎么写?
我们用 => 这个符号来告诉编译器,后面的是方法体
参数1 => { 语句1;语句2;}
到这里,实际就已经讲完了,你学会了吗?
参数1 =>
{
参数1=20;
delay_ms(参数1);
}
C =>
{
int B = C;
delay_ms( B );
}
在方法 ( ) 前加尖括号是参数类型占位符
MyDelegate<T1,T2,T3> (T1 A,T2 B){return A+B;}//最后T3是返回类型
参数类型占位可以写多个,但没意义,用多少写多少。
原型:sayhallo cal2=delegate(int a,int b){ return a+b;}; |
以上是几年前 我qq空间里做的笔记,可以参考一下。