0和1的世界
这个世界不会在乎你的自尊,它期望你做出成绩,再去强调自己的感受!

      最近,在看支持多种数据库访问的一段代码时,想到要学学 以前总是心理上排斥的Delegate和Event.
      google一下:委托是一种可以把引用存储为函数的类型。他的声明类似于函数,但不带函数体,且要使用delegate关键字。

      为了更好的理解这两个概念,我假定有如下的情节:   有老板(Boss)和三种类型的员工(A,B,C)组成的公司D,现在亟需到E公司取一份资料。(取资料这个事件发生了)取资料这份差事由谁完成呢(开始订阅事件了)?具体情况是这样的:A:即会开车又会走路;B:只会开车(老员工腿脚有些不方便)C:只会走路(驾照暂时还没拿到 :-))那么最佳人选应该是A型员工了,因为他如果遇到天气不好就Drive(),遇到交通堵塞就Walk()。 用伪代码简单阐述如下:
     

class 公司D
{
  
delegate 资料 ATypeEmployee(Boss,Message);
  资料 Drive(Boss,Message)
  
{
    带着老板的亲笔信,
return 资料
  }

  资料 Walk(Boss,Message)
  
{
    带着老板的亲笔信,
return 资料
  }

  整个事件处理
  
{
    ATypeEmployee  employee;
    老板急需派人从E公司取回资料  
//考虑到具体情况,此时派A型员工最合适;
     if 天气不好
        employee=
new ATypeEmployee(Drive);
     
if 交通堵塞
        employee
=new ATypeEmployee(Walk);
     最后按照老板的Message,圆满完成任务。
     
  }

}
从上面的示例,我们也能看出使用委托有以下要注意的地方:

1.  声明一个delegate对象,它应当与你想要传递的方法具有相同的参数和返回值类型。(当然了,A也必须和他们一样要明白老板意图,带着亲笔信,取回资料。在这里A型员工就起到了委托的作用)


2.  创建delegate对象,并将你想要传递的函数名作为参数传入(注意是不带括号的函数名)。


3.  在要实现异步调用的地方,通过上一步创建的对象来调用方法。
ps:其中第三点有点和工厂模式的思想一样.


待续ing
posted on 2005-03-19 11:47  风过无痕  阅读(387)  评论(0)    收藏  举报