gpt4 book ai didi

C# Delegate -- 如何首先将具有不同参数的多个函数(相同类型)绑定(bind)到一个委托(delegate),然后再触发/调用它们?

转载 作者:行者123 更新时间:2023-12-04 14:31:45 28 4
gpt4 key购买 nike

我需要一个 C# Delegate 首先绑定(bind)具有不同参数的多个函数(相同类型),然后再触发/调用它们。

请看我下面的例子:

(请注意,我的实际需求要复杂得多,但适用相同的原则——不想用业务/领域/实现/无聊的部分来打扰您)。
(另外,请原谅语法,如果它在某处不正确:P)

假设我有以下 4 个函数,具有相同类型和数量的参数:

Void Add(int , int)
Void Subtract(int , int)
Void Multiply(int, int)
Void Divide(int , int)

我知道因为它们具有相同的参数,所以我可以有 1 个委托(delegate)来指向所有的,对吗?

而且我知道,如果我使用多播委托(delegate),那么我可以使用它来触发全部或部分委托(delegate),对吗?

例如,
delegate void MyDelegate (int a , int b);

然后使用委托(delegate),如下所示:-
MyDelegate del;


del = Add;

del += Subtract;
del += Multiply;

后来,我可以这样使用它:
del(10,20);

现在,这将使用相同的参数 10 和 20 触发所有函数。

我的要求是有一个多播委托(delegate),我可以在其中添加我想要的所有功能,但对它们有不同的参数。

当我指定参数时,它们不应该被触发/调用,相反,它们应该在以后被调用/触发,但总的来说,然后我按顺序链接/链接它们。

例如:我想做这样的事情:
delayedDelegate = Add(1,2);
//
//Some Code Here
//
delayedDelegate += Subract(3,4)

//
//Some More Code Here
//

delayedDelegate += Multiply(5,6)

//
//More Code Here
//


delayedDelegate += Add(7,8);

//
// Just a little More Code Here
//

最后,开始执行:
// Fire all the chained functions with the parameters that werer assigned to them.
delayedDelegate.Invoke();

我记得我读过类似的东西,但今天通过谷歌搜索找不到任何东西。任何帮助将不胜感激。

最佳答案

我能想到的最简单的解决方案是使用 lambda 表达式创建闭包,将具有任意参数值的委托(delegate)“转换”为无参数的 Action 委托(delegate)。添加任意数量的委托(delegate),然后像这样立即调用它们:

    //convert each delegate with parameters to Action
Action delayedDelegate = () => Add(1, 2);
delayedDelegate += () => Subtract(3, 4);
delayedDelegate += () => Multiply(5, 6);

//Later call all delegates at once
delayedDelegate();

关于C# Delegate -- 如何首先将具有不同参数的多个函数(相同类型)绑定(bind)到一个委托(delegate),然后再触发/调用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31649245/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com