
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日举国同庆");
- }
小结:以上是本人对委托和事件知识点的分析归纳,希望对你有所帮助...
看不懂的可以留言问我哦

