C#委托&Lambda
来源:互联网 发布:java yield在Runnable 编辑:程序博客网 时间:2024/06/06 05:14
委托类似于C/C++中的函数指针,与函数指针不同的是委托是一种类型安全的类。
但是委托本身不安全,如果能用接口就不用委托。犹如函数指针一样,如果其他人设置了函数指针,任何地方都可以被调用,防人之心不可无,害人之心不可有。
虽然事件是基于委托,但事件是安全的,因为事件在外部不可以Invoke显示调用,而委托在外部则可以Invoke显示调用。
1、声明委托。
注意:因为委托是类,所以如果想被当前类(假设当前类名为A)以外的类所用,应放在类A同等级,否则使用时需要A.xxxDelegate来使用,如果为private时即使在同一个命名空间则其他类也无法使用。
public delegate int AddDelegate(int a, int b);// 加public delegate int SubDelegate(int a, int b);// 减public delegate int MulDelegate(int a, int b);// 乘public delegate int DivDelegate(int a, int b);// 除public delegate int PowerDelegate(int a, int b);// 乘方
private AddDelegate myAddDelegate;// 加private SubDelegate mySubDelegate;// 减private MulDelegate myMulDelegate;// 乘private DivDelegate myDivDelegate;// 除private PowerDelegate myPowerDelegate;// 乘方
2、使用委托
int x = 9;int y = 2;int result = 0;myAddDelegate = delegate { return add(x, y); };// 匿名委托mySubDelegate = delegate (int a, int b)// 匿名委托{ return a - b;};myMulDelegate = (int a, int b) =>// Lambda表达式{ return (a * b);};myDivDelegate = new DivDelegate(div);// 从这里看出委托是一种类,此处new了一个实例。直接传入方法myPowerDelegate = new PowerDelegate((int a, int b) =>// 从这里看出委托是一种类,此处new了一个实例。此处使用ambda表达式{ return (int)Math.Pow(a, b);});Func<int, int, int> func = (int a, int b) =>// Lambda表达式(泛型委托){ return (a / b);};
private int add(int a, int b){return (a + b);}private int div(int a, int b){return (a / b);}
3、调用
result = myAddDelegate.Invoke(x, y);// Invoke显示调用result = myAddDelegate(x, y);result = mySubDelegate(x, y);result = myMulDelegate(x, y);result = myDivDelegate(x, y);result = myPowerDelegate(x, y);result = func(x, y);
0 0
- c# lambda简化委托
- C#委托&Lambda
- C# 委托-lambda表达式
- C# Action 委托 + lambda 表达式
- c#委托与Lambda表达式
- c# 委托、事件、lambda表达式
- C#委托/Lambda表达式/事件
- C#之委托、事件、lambda
- C#委托,lambda表达式联系,
- C#教程:作为委托的Lambda表达式
- 详解C#委托、时间和Lambda表达式
- c#委托事件与lambda (整理)
- 解析C#委托、时间和Lambda表达式
- c#之委托、匿名方法、Lambda表达式
- C#委托类型-(Func,Action,Predicate,lambda)
- C#中的委托和Lambda表达式
- C#中委托和Lambda表达式
- C# 委托 事件 匿名函数 Lambda表达式
- 结构体的基本认识
- 1226
- S5PV210环境搭建:arm-linux-gcc: 没有那个文件或目录
- 荷兰国旗问题
- leetcode:82. Remove Duplicates from Sorted List II(Java)解答
- C#委托&Lambda
- iOS 新建项目架构规范
- 用宏实现模板功能
- C++模板类线性表的实现与测试
- Java判断相等(==和equals()方法)
- 清理windows下面的垃圾
- Centos修炼----->Centos7之安装Python3.5
- Struts2的值栈详解
- Leetcode Permutations II