委托
委托属于引用类型,其作用类似于 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
{
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)
评论