c# 之委托 匿名函数 lamada表达式
来源:互联网 发布:淘宝电玩巴士商城黑吗 编辑:程序博客网 时间:2024/05/29 11:09
委托:
why use 委托?
先给你一个需求,有一个字符串数组 List<string> li=new List<string>() {“abc” ,“DEf”,"HALDFJdfaf"}
要求将这三个字符串分别转换成大写,小写,和这三个字符串前后都加上双引号。
正常情况先我们需要声明三个方法来实现这个需求:
public static void strToUpper(List list){
for (int i= 0,i<list.count(),i++){
list[i]=list[i].ToUpper();
}
}
public static void strToLower(List list){
for (int i= 0,i<list.count(),i++){
list[i]=list[i].ToLower();
}
}
public static void strToLower(List list){
for (int i= 0,i<list.count(),i++){
list[i]="/"" + list[i]+"/"";
}
}
三个方法定义完成,但是你会发现我们的代码重复率其实很高,只是方法的第三行略有变化
这个时候我们想能否用一个方法就可以实现这个的功能呢?
委托:
基本定义:
委托所指向的函数必须和委托具有相同的签名(参数和返回值)
声明一个委托函数:注意写的位置是在命名空间下而不是类中
关键字 :delegate
eg: public delegate void DelSayHi(String name);
有点像定义接口中的方法,没有实现。 但是意义完全不同,因为是在类外部,
我们相当于自己定义了一个DelSyaHi 的类型。
public static void test(string name,DelSayHi del){
//这个del就是我们需要传入的方法
del(string name)
}
问题来了?委托是创建好了,但是我如何将委托与对应的方法进行绑定?
在关系到我在调用test()方法的时候,如何传入具体的方法。
DelSayHi del =方法名 (不是字符串)
赋值了一下
说明函数可以转换成委托类型。
直接调用即可 test(“jake”,方法名)
到这一步委托的好处依然没有体现,你会觉得这真他妈的麻烦我还不如直接调用舒服呢。
使用匿名函数配合使用一下
既然是一个委托: DelSysHi del 类型
不要去自定义方法,而是把方法直接赋给我们定义的委托
//关键字别忘啦!!!!
DelSayHi del = delegate(string name){consle.writelin("hello"+name);};
调用 del(“jake”);
还有一种更加简化的方法 私用lamada表达式
DelSayHi del=(string name) => {consle.writelin("hello"+name);}
lamada表达式: 最简单的的写法: n => n>4
n是随便定义的,意思是拿到一个大于4的参数
比如说我要删除一个数组中大于4的所有元素
list.RemoveAll(n=> n>4)
why use 委托?
先给你一个需求,有一个字符串数组 List<string> li=new List<string>() {“abc” ,“DEf”,"HALDFJdfaf"}
要求将这三个字符串分别转换成大写,小写,和这三个字符串前后都加上双引号。
正常情况先我们需要声明三个方法来实现这个需求:
public static void strToUpper(List list){
for (int i= 0,i<list.count(),i++){
list[i]=list[i].ToUpper();
}
}
public static void strToLower(List list){
for (int i= 0,i<list.count(),i++){
list[i]=list[i].ToLower();
}
}
public static void strToLower(List list){
for (int i= 0,i<list.count(),i++){
list[i]="/"" + list[i]+"/"";
}
}
三个方法定义完成,但是你会发现我们的代码重复率其实很高,只是方法的第三行略有变化
这个时候我们想能否用一个方法就可以实现这个的功能呢?
委托:
基本定义:
委托所指向的函数必须和委托具有相同的签名(参数和返回值)
声明一个委托函数:注意写的位置是在命名空间下而不是类中
关键字 :delegate
eg: public delegate void DelSayHi(String name);
有点像定义接口中的方法,没有实现。 但是意义完全不同,因为是在类外部,
我们相当于自己定义了一个DelSyaHi 的类型。
public static void test(string name,DelSayHi del){
//这个del就是我们需要传入的方法
del(string name)
}
问题来了?委托是创建好了,但是我如何将委托与对应的方法进行绑定?
在关系到我在调用test()方法的时候,如何传入具体的方法。
DelSayHi del =方法名 (不是字符串)
赋值了一下
说明函数可以转换成委托类型。
直接调用即可 test(“jake”,方法名)
到这一步委托的好处依然没有体现,你会觉得这真他妈的麻烦我还不如直接调用舒服呢。
使用匿名函数配合使用一下
既然是一个委托: DelSysHi del 类型
不要去自定义方法,而是把方法直接赋给我们定义的委托
//关键字别忘啦!!!!
DelSayHi del = delegate(string name){consle.writelin("hello"+name);};
调用 del(“jake”);
还有一种更加简化的方法 私用lamada表达式
DelSayHi del=(string name) => {consle.writelin("hello"+name);}
lamada表达式: 最简单的的写法: n => n>4
n是随便定义的,意思是拿到一个大于4的参数
比如说我要删除一个数组中大于4的所有元素
list.RemoveAll(n=> n>4)
阅读全文
0 0
- c# 之委托 匿名函数 lamada表达式
- C# 委托 事件 匿名函数 Lambda表达式
- c#之委托、匿名方法、Lambda表达式
- c# lamada表达式
- C# 匿名函数委托
- 【转】【UNITY3D 游戏开发之七】C# 中的委托、事件、匿名函数、Lambda 表达式
- 【转】【UNITY3D 游戏开发之七】C# 中的委托、事件、匿名函数、Lambda 表达式
- 【UNITY3D 游戏开发之七】C# 中的委托、事件、匿名函数、Lambda 表达式
- 委托 匿名函数 ,Lambda表达式
- Lamada 表达式(C# 3.0)
- c# 匿名函数与委托
- C#匿名函数之匿名方法与lambda表达式
- C# 委托用法、匿名方法、Lambda表达式
- 匿名函数、委托、lambda表达式、扩展方法
- 匿名函数、泛型委托、Lamda表达式
- C#的委托、匿名函数、lamda表达式简单理解,lambda的list.MoveALL()的应用
- Unity c# 委托和回调 匿名函数和Lambda表达式
- C#函数式程序设计之函数、委托和Lambda表达式
- MATLAB 函数fspecial支持的空间滤波器
- Android-源码解析Handler&Looper
- Linux下SVN使用笔记
- Mysql5.7.18Zip安装配置
- mysql之 mysql 5.6不停机主从搭建(一主一从基于日志点复制)
- c# 之委托 匿名函数 lamada表达式
- C语言的#运算符
- php实现非对称加密
- Android平台HttpGet、HttpPost请求实例
- C指针操作(一)
- 浅析.Net下的AppDomain编程
- vs2012 升级到Update 4后,打开cpp文件 弹出 “Visual Studio 遇到了异常。这个可能是由某个扩展导致的”
- BitmapFactory option详解
- 初识gradle打包apk