在C#中委托合并

时间:2016-03-16 09:30:12

标签: c#

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

public Action TrainsAreComing;

然后我做了一些实例方法:

TrainsAreComing = FirstSubscriber;

然后:

TrainsAreComing += SecondSubscriber

我已经阅读了一些SO答案,人们说这句话转化为:

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

我发现这不是真的,因为在这里你实际上正在组合FirstSubscriber + FirstSubscriber + SecondSubscriber,这不是TrainsAreComing += SecondMethod所做的(只是将FirstSubscriber与SecondSubscriber结合起来)。

那么后台真正发生了什么?你会如何使用TrainsAreComing += SecondMethod编写Delegate.Combine的去糖版本?

1 个答案:

答案 0 :(得分:5)

问问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)非常相似。