陪你听风

委托,事件,lamdba委托语句

电脑版发表于:2019/10/24 16:52

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日举国同庆");
        }


小结:以上是本人对委托和事件知识点的分析归纳,希望对你有所帮助...

看不懂的可以留言问我哦

关于TNBLOG
TNBLOG,技术分享。技术交流:群号677373950
ICP备案 :渝ICP备18016597号-1
App store Android
精彩评论
{{item.replyName}}
{{item.content}}
{{item.time}}
{{subpj.replyName}}
@{{subpj.beReplyName}}{{subpj.content}}
{{subpj.time}}
猜你喜欢