在.NET中,为什么事件连接顺序如此重要?

时间:2011-10-12 10:47:26

标签: .net events delegates

using System;

static class Program
{
    static event Action A = delegate { };
    static event Action B = delegate { };

    static void Main()
    {
        A += B;
        B += ()=>Console.WriteLine("yeah");
        A.Invoke();
    }
}

这不打印任何东西,但是如果我交换Main的前两行,它就会。

2 个答案:

答案 0 :(得分:5)

事件是不可变的,即在分配时获得副本,如整数

int a = 1;
int b = 2;

a += b; // a == 3
b += 1; // a is still 3

答案 1 :(得分:2)

A + = B;将B的代表列表附加到A. 它正在复制B的内容,而不是对B的引用。

与以下内容相同:

A = (Action)System.Delegate.Combine(A, B);

所以顺序绝对重要。