《委托二》

继上篇《委托一》http://www.cnblogs.com/fjsnail/archive/2013/06/14/3134871.html之后,今天继续学习委托。貌似很久没有二了,下来开始。

正如上篇介绍,委托就像是一个类,实际上他的申明就像是一个类

delete void Feedback(int value);

下面介绍一个比较全面的例子,例子比较好理解,在第一篇中有讲他的详细定义

这是简化的委托调用过程
Feedback
 fb3 = new Feedback(print);   //最简单的调用委托方式:声明委托----指明回调函数-----执行委托回调函数 fb3.Invoke(15);//可以没有invoke()
    delegate void Feedback(Int32 value);
    //1 声明一个委托
    class Program
    {
        static void Main(string[] args)
        {
            StaticDelegateDemo();
            InstanceDelegateDemo();
            ChainDeleteDemo1();
            ChainDeleteDemo2();
            Console.ReadKey();
        }

        private static void StaticDelegateDemo()
        {
            Console.WriteLine("------------StaticDeleteDemo--------------");

            Counter(1, 5, null);                      //不传委托变量
            Counter(1,5,new Feedback(print));         //有点像匿名对象        2.传递委托实例,并定义回调函数(其实是将引用传递给另个函数创建的实例)
            Counter(1,5,new Feedback(Program.print));  //加program

            Feedback fb = new Feedback(Program.print);  //直接声明一个委托对象,赋予委托回调函数,并执行
            fb(5);
            
        }

        private static void InstanceDelegateDemo()
        {
            Console.WriteLine("------------Instance Delegate Demo--------------");

            Feedback fb1 = new Feedback(print);
            Feedback fb2 = new Feedback(Program.print);

            Counter(11,15,null);
            Counter(11,15,fb1);
            Counter(11, 15, fb2);

            Feedback fb3 = new Feedback(print);
            fb3(15);
        }

        private static void ChainDeleteDemo1()
        {
            Console.WriteLine("------------ChainDeleteDemo-------------------");
            Feedback fb1 = new Feedback(print);
            Feedback fb2 = new Feedback(Program.print);              //通过方法,增减委托
            Feedback fb3 = new Feedback(Program.print);

            fb1=(Feedback)Feedback.Combine(fb1, fb2);
            fb1 = Feedback.Remove(fb1,fb2) as Feedback;
            Counter(21,25,fb1);
        }
        private static void ChainDeleteDemo2()
        {
            Console.WriteLine("------------ChainDeleteDemo2-------------------");
            Feedback fb1 = new Feedback(print);
            Feedback fb2 = new Feedback(Program.print);            //通过+-符号,增减委托
            Feedback fb3 = new Feedback(Program.print);

            fb1 += fb2;
            fb1-=fb2;
            Counter(21, 25, fb1);
        }

        private static void print(Int32 value)
        {
            Console.WriteLine(value);
        }

        private static void Counter(Int32 from ,Int32 to,Feedback fb)
        {
          Int32 index;
          for(index=from;index<to;index++)
          {
          }
          if(fb!=null)                       //给回调函数赋值
            fb(index);          
        }
    }

  

 

 

posted @ 2013-08-13 15:47  Jackvin  阅读(226)  评论(0编辑  收藏  举报