【发布时间】:2012-12-06 16:46:09
【问题描述】:
我有一个简单的事件:
public class ClassA
{
public event Func<string, int> Ev;
public int Do(string l)
{
return Ev(l);
}
}
还有两种方法:
static int Display(string k)
{
return k.Length;
}
static int Display_2(string k)
{
return k.Length*10;
}
我正在注册这个活动:
ClassA a = new ClassA();
a.Ev += Display;
a.Ev += Display_2;
现在,我正在执行:
Console.WriteLine(a.Do("aaa"));
输出:
什么???
-
他在调用列表中有 2 个方法!它确实运行了它们,但为什么它只显示last注册的结果?
-
"3"的结果到哪里去了? (第一次调用)? (虽然display+display_2都被执行了......我没想到console.write会遍历结果。但也没想到他会决定显示哪个。)
编辑:
【问题讨论】:
-
这里没有代表数组。
-
这是某种集合。您可以将其作为数组获取,但您的代码不能。只是提示选择更好的标题。
-
它被称为“多播委托”,而不是“委托数组”。
-
@RoyiNamir 它怎么能全部归还?它不会是正确的类型来返回所有这些,它需要某种集合才能做到这一点,然后它就不会匹配它自己的签名。
-
@RoyiNamir 是的,你没想到它会做到这一点,我明白了。我问的是你确实期望它做什么,而不是你没有期望它做什么。