C#委托和事件详解(6)

来源:百度文库 编辑:神马文学网 时间:2024/07/04 20:28:28

我们运行这段代码,嗯,没有任何问题。程序一如预料地那样输出了:

Morning, Jimmy Zhang

早上好, 张子阳

现在,假设我们需要使用上一节学到的知识,将多个方法绑定到同一个委托变量,该如何做呢?让我们再次改写代码:

以下是引用片段:
   staticvoidMain(string[]args){
   GreetingManagergm=newGreetingManager();
   GreetingDelegatedelegate1;
   delegate1=EnglishGreeting;
   delegate1+=ChineseGreeting;
   gm.GreetPeople("JimmyZhang",delegate1);
   }

输出:

Morning, Jimmy Zhang

早上好, Jimmy Zhang

到了这里,我们不禁想到:面向对象设计,讲究的是对象的封装,既然可以声明委托类型的变量(在上例中是delegate1),我们何不将这个变量封装到 GreetManager类中?在这个类的客户端中使用不是更方便么?于是,我们改写GreetManager类,像这样:

以下是引用片段:
   publicclassGreetingManager{
   //在GreetingManager类的内部声明delegate1变量
   publicGreetingDelegatedelegate1;
   publicvoidGreetPeople(stringname,GreetingDelegateMakeGreeting){
   MakeGreeting(name);
   }
   }

现在,我们可以这样使用这个委托变量:

以下是引用片段:
   staticvoidMain(string[]args){
   GreetingManagergm=newGreetingManager();
   gm.delegate1=EnglishGreeting;
   gm.delegate1+=ChineseGreeting;
   gm.GreetPeople("JimmyZhang",gm.delegate1);
   }