Rob*_*Cox 4 c# methods delegates
我有这个代码:
public void myMethod()
{
int a = 10;
int b = 20;
Func<int, int, int> multiplyDelegate;
multiplyDelegate = Multiply;
multiplyDelegate += Multiply2;
Console.WriteLine(multiplyDelegate(a,b));
}
public int Multiply(int x, int y)
{
return x * y;
}
public int Multiply2(int x, int y)
{
return x * y + 10;
}
Run Code Online (Sandbox Code Playgroud)
通过运行myMethod,我希望控制台显示两个方法"Multiply"和"Multiply2"的返回值,但只显示方法"Multiply2"的返回值.我在这里做错了什么,或者我误解了代表的概念?根据我所学到的,委托是一系列对方法的引用.
您是对的委托可以存储方法并一次调用多个方法。除非您明确调用它们,否则它将返回最后一个。
使用您的代码,这里是您所有方法集合的显式调用示例。
var results = multiplyDelegate.GetInvocationList().Select(x => (int)x.DynamicInvoke(10, 20));
foreach (var result in results)
Console.WriteLine(result);
Run Code Online (Sandbox Code Playgroud)
编辑 :
这将适用于 functionFunc
而不是Action
. 这是一个例子,假设它是一个Action
foreach (Delegate action in multiplyDelegate.GetInvocationList())
{
action.DynamicInvoke(10, 20);
// Do Something
}
Run Code Online (Sandbox Code Playgroud)
第二个示例Func
也适用。