C# 入门(9) 委托(delegate),匿名方法,Lambda表达式
来源:互联网 发布:传奇世界数据库 编辑:程序博客网 时间:2024/05/21 08:04
C#的委托,匿名方法,Lambda表达式
参考书籍: 《C#图解教程》
委托就像C++的函数指针一样,可以指向一个函数,但委托更牛逼,指的其实是一个函数列表,依次执行函数。
在C++中,匿名方法和Lambda表达式其实是一回事,C#里就是两回事了。
委托
委托的初始化
delegate void MyDel(int value);//下面两句等价,SomeClass.SomeFunction是某个相同返回值,参数列表的函数。MyDel del = new MyDel(SomeClass.SomeFunction);MyDel del = SomeClass.SomeFunction;
组合委托 & 为委托添加方法 & 删除方法 & 委托调用
//可以直接使用 + 操作符将方法或委托组合在一起。委托允许重复,及执行多次。MyDel del = delA + delA + delB + SomeClass.SomeFunction;//或者使用 += 操作符添加方法或委托。del += delC + SomeClass.SomeFunction;//当要注意使用 += 操作符时,左值要先初始化。MyDel del2;del2 += del; //错误,del2没有初始化。//删除用 -= 操作符。del -= delA;del = del - SomeClass.SomeFunction;//调用,相当于给列表中所有方法给了666的参数。del(666);
在使用 += 运算符时,实际发生的是创建一个新的委托,把左边的委托加上右边方法的组合,再赋值个左边的委托。
使用 -= 运算符时,如果匹配有多个相同的方法,会从列表最后向前搜索,删掉第一个匹配的方法的实例。
空委托用 -= 运算符会报异常。
匿名方法
匿名方法是要带delegate关键字的。
//正常的画风应该是这样的。MyDel del = delegate(int value) { return value + 100; }//省略圆括号,但必须满足以下两个条件//1.委托的参数列表里面不包含任何out参数。//2.匿名方法不使用任何参数。MyDel del = delegate { SomeFunction(); SomeFunction2(1,2,3,4); }del(666); //传进去的666对上面没有参数的匿名函数没有影响。//params参数,如果委托有params参数,匿名方法的参数列表将忽略params关键字。delegate void anotherDel(int X,params int[] Y);anotherDel aDel = delegate(int X,int Y) { }; //省略了params
Lambda表达式
相比匿名方法,Lambda表达式看起来简单许多,直接上图。
0 0
- C# 入门(9) 委托(delegate),匿名方法,Lambda表达式
- c#之委托、匿名方法、Lambda表达式
- C# 委托用法、匿名方法、Lambda表达式
- 委托,匿名方法,lambda表达式
- C#委托,匿名方法和Lambda表达式(译)
- C#委托,匿名方法和Lambda表达式(译)
- C#委托,匿名方法和Lambda表达式(译)
- C#中的委托,匿名方法和Lambda表达式
- C#的委托,匿名方法和Lambda表达式
- C#中的委托,匿名方法和Lambda表达式
- C#中的委托,匿名方法和Lambda表达式
- C# 委托 事件 匿名函数 Lambda表达式
- C#中的委托,匿名方法、泛型委托和Lambda表达式表达式演变过程
- 转: C#中的委托,匿名方法、泛型委托和Lambda表达式表达式演变过程
- 匿名函数、委托、lambda表达式、扩展方法
- 委托和匿名方法、lambda表达式
- 委托、匿名方法、Lambda表达式的演进
- 委托中的匿名方法和lambda表达式
- Java设计模式--单例类
- 5-3
- A
- android ListView 单条刷新方法实践及原理解析
- Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp
- C# 入门(9) 委托(delegate),匿名方法,Lambda表达式
- TMS320F28027学习笔记二
- HDFS一些概念的理解
- linux_011之库函数string.c
- linux_011之库函数wait.c
- sockaddr与sockaddr_in,sockaddr_un结构体详解
- Android之ActivityLifecycleCallbacks的得到当前的activity的状态
- 内核启动的汇编阶段——head.S文件
- js和jQurey中获取select标签选中的值