//委托当作方法的参数进行传递,并进行动态调用
using System;
delegate void Eatdelegate(string food);
class Man
{
private string name;
public Man(string name)
{
this.name=name;
}
public void eat(string food)
{
Console.WriteLine(name+"吃"+food);
}
}
class Party
{
static void eatToghter(string food,params Eatdelegate [] values)
{
if(values==null)
{
Console.WriteLine("坐谈会结束");
}
else
{
Eatdelegate eatChain=null;//定义了一个委托链
foreach(Eatdelegate ed in values)
eatChain+=ed;//给委托链赋值
eatChain(food);
Console.WriteLine();
}
}
static void Main()
{
Man ZS=new Man("张三");
Man LS=new Man("李四");
Man WW=new Man("王五");
Eatdelegate zs=new Eatdelegate(ZS.eat);
Eatdelegate ls=new Eatdelegate(LS.eat);
Eatdelegate ww=new Eatdelegate(WW.eat);
Console.WriteLine("张三,李四,王五开坐谈会");
eatToghter("西瓜",zs,ls,ww);//委托当作方法的参数进行传递
Console.WriteLine("李四出去接电话");
eatToghter("香蕉",zs,ww);
Console.WriteLine("李四回来了");
eatToghter("苹果",zs,ls,ww);
eatToghter(null,null);
}
}