进一步阐述C#中的委托

前面讲到C#中的委托,见文章http://www.cnblogs.com/codeshark/archive/2008/03/24/1119453.html,细心的朋友会发现,静态方法能否“ 包装”到一个类里面,进行动态调用了?答案是肯定的。代码如下:
 1using System; 
 2delegate void EatDelegate(string food); 
 3class Man 
 4
 5private string name; 
 6public Man(string name) 
 7
 8this.name=name; 
 9}
 
10public void eat(string food) 
11
12Console.WriteLine(name+""+food); 
13}
 
14}
 
15class Chat 
16
17static void eatTogether(string food,params EatDelegate[] values) //可变数量的参数用委托数组实现 
18
19if (values==null
20
21Console.WriteLine("聊天结束"); 
22}
 
23else 
24
25EatDelegate eatChain=null;  //声明一个委托链
26foreach(EatDelegate ed in values) 
27eatChain+=ed; 
28eatChain(food); 
29Console.WriteLine(); 
30}
 
31}
 
32static void Main() 
33
34Man CH =new Man("葱花"); 
35Man YY=new Man("样样"); 
36Man DS=new Man("大蒜"); 
37EatDelegate ch=new EatDelegate(CH.eat); 
38EatDelegate yy=new EatDelegate(YY.eat); 
39EatDelegate ds=new EatDelegate(DS.eat); 
40Console.WriteLine("葱花,样样,大蒜在聊天"); 
41eatTogether("西瓜",ch,yy,ds); //委托实例名称 
42Console.WriteLine("葱花出去接电话"); 
43eatTogether("香蕉",yy,ds); 
44Console.WriteLine("葱花回来了"); 
45eatTogether("桔子",ch,yy,ds); 
46eatTogether(null,null); 
47}
 
48}
 
49
由此可以看出:代码的架构性至关重要。

posted on 2008-03-24 12:03  CodeShark  阅读(215)  评论(0编辑  收藏  举报

导航