正文

C#Doorstep2面向对象程序设计篇72008-04-03 16:40:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/xman/33902.html

分享到:


委托

   委托属于引用类型,其作用类似于 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类实例cF2方法完成自己的功能。    

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)

阅读(2600) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册