委托详解(匿名函数、Lamda表达式、多播委托)
来源:互联网 发布:小内存win10平板优化 编辑:程序博客网 时间:2024/06/05 02:55
1、匿名函数:
匿名函数适合在方法只调用一次的情况下使用。
每次都为这个方法编写方法语法,就太麻烦了,因此程序员发明了匿名的方法
使用语法:
委托类型 委托变量 = delegate(类型 参数列表)
{
方法体
};
5、Lamda表达式:
是匿名函数的另一种形式
使用语法: ( => 读作goes to)
委托类型 委托变量 = (参数列表) => 方法体 ;
注意:
(1)如果参数列表没有参数,只需要写一对圆括号即可,如:()=>;
(2)如果参数只有一个,可以省略圆括号,例如:e=>
(3)如果方法体只有一句话,可以省略花括号;
(4)如果方法只有一句话,返回的return,可以省略
6、多播委托(multicast delegate)
(1) 多播委托可以实现的功能:
注册多个方法,调用时将这些方法依次执行一遍
(2) 实现语法:
a、准备委托变量
b、第一个方法使用=赋值
c、后面的方法使用+=赋值
通过使用 +=符号进行多播委托方法的注册,注册后就可以依次进行委托方法的调用。
(3)通过 -= 符号可进行已注册方法的移除
(4)多播委托在执行中可以有返回值,但是一般不使用
委托应用例子:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 委托{ // //本代码是实现求一个数组中的最大值,可比较数字类型、字符串类型、名字等等。 //在比较过程中,for循环部分是重复的代码,故可利用委托来减少代码重复量 // //构造委托类型 public delegate int DelCompare(object o1, object o2);
class Program { static void Main(string[] args) { object[] arr = {"lohv","fudsfd","lkjhgfvbnjydaghfjak","bhsdfgs"}; //方式一: 正常委托方式 (通过调用已创建的函数的方式进行委托调用) object result1 = GetMax(arr, Compare2); //方式二:匿名函数 匿名函数适用于方法只调用一次的情况。 不需要另外单独再构造方法 object resul2t = GetMax(arr, delegate(object o1, object o2) { string s1 = (string)o1; string s2 = (string)o2; return s1.Length - s2.Length; }); //方式三:Lamda表达式 (参数)=>{方法体}; Lamda表达式是本质也是匿名函数 //匿名函数适用于方法只调用一次的情况。 不需要另外单独再构造方法 object result3 = GetMax(arr, (object o1,object o2) => { string s1 = (string)o1; string s2 = (string)o2; return s1.Length - s2.Length; }); Console.WriteLine(result); Console.ReadKey(); } //构建的主要的方法,这一部分是所有方法可以重用的部分,通过传入委托来减少代码的重复量 public static object GetMax(object[] nums, DelCompare del) { object max = nums[0]; for (int i = 0; i < nums.Length; i++) { //要传一个比较的方法 if (del(max, nums[i]) < 0) { max = nums[i]; } } return max; } //要进行委托的方法,比较数字类型大小的方法 public static int Compare1(object o1, object o2) { int n1 = (int)o1; int n2 = (int)o2; return n1 - n2; } //要进行委托的方法,比较字符串类型大小的方法 public static int Compare2(object o1, object o2) { string s1 = (string)o1; string s2 = (string)o2; return s1.Length - s2.Length; } }}
0 0
- 委托详解(匿名函数、Lamda表达式、多播委托)
- 委托、lamda表达式..委托概念-匿名函数-泛型委托-Lamda表达式-多播委托
- Lamda表达式 委托 匿名委托 Lamda表达式
- 匿名函数、泛型委托、Lamda表达式
- 委托的用处及匿名函数(lamda表达式)
- 委托、匿名委托和Lamda表达式
- 委托(泛型委托、lamda表达式、用委托进行窗体传值、多播委托
- 泛型委托,匿名委托,lamda表达语句,lamda表达式
- 四个代码让你明白委托,匿名函数,Lamda表达式
- 委托,匿名方法与LAMDA表达式
- C#的委托、匿名函数、lamda表达式简单理解,lambda的list.MoveALL()的应用
- Action/Func/Lamda/匿名委托
- 委托 匿名函数 ,Lambda表达式
- (11)委托和Lamda表达式
- (11)委托和Lamda表达式
- 委托,事件,回调,匿名函数与Lambda表达式详解
- C# 委托、事件,lamda表达式
- c# 多播委托 和匿名方法
- Android NFC开发的那些坑
- 5.5 Swift参数的常量和变量特性
- 阿里大于短信接口thinkphp
- 修改 myEclipse 自动生成注释模板
- 5.6 Swift中inout参数
- 委托详解(匿名函数、Lamda表达式、多播委托)
- 5.7 Swift变参函数.mp4
- 有关C++模版
- 如何使用HttpWebRequest POST数据时设置Connection="Keep-Alive"
- thinkphp照片文件上传
- poj 2560_Freckles_并查集
- SLAM基础知识总结
- android Fragments详解四:管理fragment
- React 入门实例教程