委托 委托属于引用类型,其作用类似于 C++中函数指针的用途。与函数指针不同,委托实例独立于它所封装的方法的类;最主要的是那些方法与委托的类型是兼容的。另外,函数指针只能引用静态函数,而委托可以引用静态和实例方法。委托最大的特点是它不知道或不关心自己所引用的对象的类,任何对象中的方法都可以通过委托动态的调用,只要方法的参数类型和返回类型必须和委托匹配。 using System; public delegate void D(int x); class C { public static void F1(int i) { Console.WriteLine("C.F1: " + i); } public void F2(int i) { Console.WriteLine("C.F2: " + i); } } class Test { static void Main() { D cd1 = new D(C.F1); //此处为静态方法的调用 C c = new C(); D cd2 = new D(c.F2); //此处为非静态方法的调用 D cd3 = new D(cd2); D cd4 = cd1+cd2+cd3; D cd5=cd4-cd3; Console.WriteLine("delegate cd1:");cd1(1); Console.WriteLine("delegate cd2:");cd2(2); Console.WriteLine("delegate cd3:");cd3(3); Console.WriteLine("delegate cd4:");cd4(4); Console.WriteLine("delegate cd5:");cd5(5); Console.ReadKey(); } } 结果分析: D cd1 = new D(C.F1); cd1(1); 此处委托使用静态引用,cd1将调用C类的F1方法完成自己的功能。 C c = new C(); D cd2 = new D(c.F2); cd2(2); 此处委托使用实例引用,cd2将调用C类实例c的F2方法完成自己的功能。 D cd3 = new D(cd2); cd3(3); 利用已有的方法构造新的方法,即cd3引用cd2方法。 D cd4 = cd1+cd2+cd3; cd4(4); 此处cd4为调用多种方法的多重委托,它可以维护一个方法列表,这个列表可以成为委托的调用列表,也即委托链。 D cd5=cd4-cd3;cd5(5); 此处cd4为从cd4中移除cd3后得到新的方法,即cd5= cd1+cd2。 (To be continued)

评论