gpt4 book ai didi

c# - C# 中的委托(delegate)组合

转载 作者:行者123 更新时间:2023-11-30 20:20:35 26 4
gpt4 key购买 nike

假设我在 C# 的类中有一个委托(delegate)字段:

public Action TrainsAreComing;

然后我会这样做,在某些实例方法中:

TrainsAreComing = FirstSubscriber;

然后:

TrainsAreComing += SecondSubscriber

我读过一些 SO 答案,人们说这句话翻译成:

 TrainsAreComing += (Action)Delegate.Combine(TrainsAreComing, new Action(SecondSubscriber));

我发现这不是真的,因为这里实际上是组合 FirstSubscriber + FirstSubscriber + SecondSubscriber 这不是 TrainsAreComing += SecondMethod 所做的(只是组合 FirstSubscriber 和 SecondSubscriber)。

那么后台到底发生了什么?您将如何使用 Delegate.Combine 编写 TrainsAreComing += SecondMethod 的脱糖版本?

最佳答案

询问 roslyn 总是一个好主意:http://goo.gl/JL8gjy

public static void Main()
{
Action ac = Method1;
ac += Method2;
}

public static void Main()
{
Action a = new Action(C.Method1);
a = (Action)Delegate.Combine(a, new Action(C.Method2));
}

我会注意到 += 运算符通常被转换为 + 和一个单独的 = 运算符,例如:

ac = ac + Method2;

这更容易看出它与 Delegate.Combine(ac, Method2) 非常相似。

关于c# - C# 中的委托(delegate)组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36031518/

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