继上篇《委托一》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); } }