C#委托与lamdba简介
?委托:
l 什么委托:
本质是方法指针
l 委托的作用:
作用:进行方法传递,方法可以当作一个参数进行传递
C#里边要传递方法需要借助委托
l 使用委托一般的步骤:
1:定义委托
Public delegate 返回值方法名称(参数);
2:委托可以关联方法
3:执行委托,就相当于执行方法
?系统委托
作用:简化委托的定义,系统已经定义好,使用的时候直接使用,不需要重复定义
l 系统委托的主要分类
Action:无返回值,有0-16个参数
Func:有返回值,有0-16个参数
?Lamdba表达式
l 作用:
lamdba表达式可以简化方法的定义
l 语法:
(方法参数)=>{方法体};
例如:无参无返回值的lamdba表达式
()=>{};
例如:一个参数无返回值
(a)=>{};
例如:一个参数一个返回值
(a)=>{return a*a};
例如:2个参数1个返回值
(a,b)=>{return a+b};
?事件
事件和委托的区别?
事件是不是一种委托?
事件是一种特殊的委托实例,其实就是在委托的前面加上一个event关键字
加上了event后就会出现一个闪电的标识,闪电的标识就表示一个事件
事件是一种标准
几种做法都可以做,但是事件用在这里更标准一点
事件是有限制的委托
event,限制了委托的使用
1:它只能+=或者-=
2:要执行这个委托在外面不能执行,无法破坏代码的封装性
加不加event,对我们正常使用没有什么影响
事件也是传递的一个方法
事件(一种特殊的委托)
事件的定义需要event修饰,委托不需要
public event Action interval; public void Start( int timespan) { while (true) { if (interval != null) { interval(); System.Threading.Thread.Sleep(timespan); } } }
?系统委托
Predicate<int> pre = (a) => { return false; }; //只是bool类型 Comparison<int> comp = (a, b) => { return 1; }; //比较:需2个参数 Func<int, bool> func = (a) => { return false; }; //有返回值 Action<int> action = (a) => { Console.WriteLine(); }; //无返回值 //定义一个无参无返回值的委托 public delegate void DEL_Way(); //定义一个有一个参数无返回值的委托 public delegate void DEL_Squer(int a); //定义一个有2个参数有返回值的委托 public delegate int DEL_Add(int a, int b);
?Lamdba 表达式
//语法:(方法参数)=>{方法体}; //无参无返回值的lamdba表达式 //Action action = () => { Console.WriteLine("Hello lamdba"); }; //action(); //1个参数无返回值的lamdba表达式 //Action<int> action = (a) => { Console.WriteLine(a * a); }; //action(5); //1个参数1个返回值的lamdba表达式 //Func<int, int> func = (a) => {return 2 * a; }; //int result = func(7); //Console.WriteLine(result); //2个参数1个返回值的lamdba表达式 //Func<int, int, int> func = (a, b) => { return 2 * a + b; }; //int result = func(7,5); //Console.WriteLine(result);
//事件要用+=或-=链接,委托则不用
MyTimer mytime = new MyTimer(); // mytime.interval = mytime_interval; mytime.interval += mytime_interval1; // mytime.interval -= mytime_interval; mytime.interval += mytime_interval2; mytime.Start(1000); Console.ReadLine(); } static void mytime_interval2() { Console.WriteLine("八月十五中秋佳节"); } static void mytime_interval1() { Console.WriteLine("10,1日举国同庆"); }
小结:以上是本人对委托和事件知识点的分析归纳,希望对你有所帮助...
看不懂的可以留言问我哦