前面讲到C#中的委托,细心的朋友会发现,静态方法能否“ 包装”到一个类里面,进行动态调用了?答案是肯定的。代码如下:
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 Chat
{
static void eatTogether(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 CH =new Man("葱花");
Man YY=new Man("样样");
Man DS=new Man("大蒜");
EatDelegate ch=new EatDelegate(CH.eat);
EatDelegate yy=new EatDelegate(YY.eat);
EatDelegate ds=new EatDelegate(DS.eat);
Console.WriteLine("葱花,样样,大蒜在聊天");
eatTogether("西瓜",ch,yy,ds); //委托实例名称
Console.WriteLine("葱花出去接电话");
eatTogether("香蕉",yy,ds);
Console.WriteLine("葱花回来了");
eatTogether("桔子",ch,yy,ds);
eatTogether(null,null);
}
}
由此可以看出:代码的架构性至关重要。
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 Chat
{
static void eatTogether(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 CH =new Man("葱花");
Man YY=new Man("样样");
Man DS=new Man("大蒜");
EatDelegate ch=new EatDelegate(CH.eat);
EatDelegate yy=new EatDelegate(YY.eat);
EatDelegate ds=new EatDelegate(DS.eat);
Console.WriteLine("葱花,样样,大蒜在聊天");
eatTogether("西瓜",ch,yy,ds); //委托实例名称
Console.WriteLine("葱花出去接电话");
eatTogether("香蕉",yy,ds);
Console.WriteLine("葱花回来了");
eatTogether("桔子",ch,yy,ds);
eatTogether(null,null);
}
}
由此可以看出:代码的架构性至关重要。