gpt4 book ai didi

c# - 在 C# 中编写多播委托(delegate) - 我应该使用运算符还是 Action.Combine?

转载 作者:太空狗 更新时间:2023-10-29 20:10:36 26 4
gpt4 key购买 nike

阅读文档我可以看到 + 运算符可用于组合/组合相同类型的委托(delegate)。

以同样的方式,我可以看到我可以使用 - 运算符从组合委托(delegate)中删除 a。

我还注意到 Action 类型有静态的 CombineRemove 方法,可用于连接两个委托(delegate)的调用列表,并分别从另一个委托(delegate)的调用列表中删除一个委托(delegate)的调用列表的最后一次出现。

        Action a = () => Debug.WriteLine("Invoke a");
Action b = () => Debug.WriteLine("Invoke b");
a += b;
a.Invoke();

//Invoke a
//Invoke b

Action c = () => Debug.WriteLine("Invoke c");
Action d = () => Debug.WriteLine("Invoke d");
Action e = Action.Combine(c, d);
e.Invoke();

//Invoke c
//Invoke d

a -= b;
a.Invoke();

//Invoke a

e = Action.Remove(e, d);
e.Invoke();

//Invoke c

就调用列表的合并/删除方式而言,它们似乎产生了相同的结果。

我已经在 SO 和其他代码的各种示例中看到了这两种方式。有没有理由我应该使用一种或另一种方式?有没有坑?例如 - 我可以在 a -= b; 行中看到一条警告,指出 Delegate subtraction has predicted results - 那么我应该使用 Remove 来避免这种情况吗?

最佳答案

委托(delegate)运算符(+-)是静态方法的简写。
完全没有区别。

a += b 编译为 a = (Action)Delegate.Combine(a, b)

关于c# - 在 C# 中编写多播委托(delegate) - 我应该使用运算符还是 Action.Combine?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14197857/

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