假设我在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
的去糖版本?
答案 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)
非常相似。