class Man
{
private string name;
public Man(string name)
{
this.name = name;
}
public void eat(string food)
{
Console.WriteLine(name+"吃"+food);
}
} delegate void EatDelegate(string food);//声明代理 class Program
{ static void EatTogether(string food, params EatDelegate[] values)
{
if (values == null)
{
Console.WriteLine("没有东西吃了!"); }
else
{
EatDelegate EatList = null;
foreach (EatDelegate ed in values)
{
EatList += ed;
EatList(food); } } }
static void Main(string[] args)
{
Man ZS = new Man("张三");
Man LS = new Man("李四");
EatDelegate zs = new EatDelegate(ZS.eat);
EatDelegate ls = new EatDelegate(LS.eat);
EatTogether("西瓜",zs,ls);
//Console.ReadLine();
}
} 张三吃西瓜怎么会出现再次?
{
private string name;
public Man(string name)
{
this.name = name;
}
public void eat(string food)
{
Console.WriteLine(name+"吃"+food);
}
} delegate void EatDelegate(string food);//声明代理 class Program
{ static void EatTogether(string food, params EatDelegate[] values)
{
if (values == null)
{
Console.WriteLine("没有东西吃了!"); }
else
{
EatDelegate EatList = null;
foreach (EatDelegate ed in values)
{
EatList += ed;
EatList(food); } } }
static void Main(string[] args)
{
Man ZS = new Man("张三");
Man LS = new Man("李四");
EatDelegate zs = new EatDelegate(ZS.eat);
EatDelegate ls = new EatDelegate(LS.eat);
EatTogether("西瓜",zs,ls);
//Console.ReadLine();
}
} 张三吃西瓜怎么会出现再次?
解决方案 »
- 把控件A赋值给控件B 的问题,B为何未获得A的一些属性,事件?
- DLL文件可以有AppConfig么?
- [共享]发布一个我写的正规表达式测试器
- oracle的字符集为WE8ISO8859P1, 使用C#插入中文时的奇怪问题
- IP段问题 求C#代码
- MSXML2.DOMDocument 的问题
- Telerik.WebControls RadUpload 大附件到100%卡住的问题
- 請教: 讀取 XML file 並分析每一個節點相關資訊?(XmlTextReader)
- datagrid显示数据库的字段的中文描述问题,急用!!
- 一个弱智关于类型转换的问题
- 一个超级奇怪的问题.
- DataRow.Delete() 的问题 谢谢!!
foreach (EatDelegate ed in values)
{
EatList += ed;
EatList(food);
}
-》
1、EatDelegate EatList = null;
foreach (EatDelegate ed in values)
{
EatList += ed;
}
foreach (EatDelegate ed in values)
{
EatList(food);
}
2、foreach (EatDelegate ed in values)
{
ed(food);
}
多调试下看看就会找到原因。
foreach (EatDelegate ed in values)
{
EatList += ed;
}
EatList(food);
2、foreach (EatDelegate ed in values)
{
ed(food);
}
{
EatList += ed;
EatList(food);
}
第1次调用EatList(food);输出“张三...”,
第2次调用EatList(food);输出“张三...”、“李四...”
注意这里有个加号。Delegate支持multicast,你加上的越多,触发的时候都会执行次数增加。
http://www.google.cn/search?client=aff-cs-maxthon&forid=1&ie=utf-8&oe=UTF-8&hl=zh-CN&q=%E5%A4%9A%E6%92%AD%E5%A7%94%E6%89%98
我这样写也只执行一次
Man ZS = new Man("张三");
Man LS = new Man("李四");
EatDelegate zs = new EatDelegate(ZS.eat);
zs=zs+LS.eat
EatTogether("西瓜",zs);
//
谢谢各位