2011-10-12 36 views
4
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的前两行,它会打印任何内容。在.NET中为什么事件连接顺序是这样的?

回答

5

事件是不可变的,即你得到一份拷贝分配时,喜欢整数

int a = 1; 
int b = 2; 

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

很好的答案 - 也许就术语而言,最好说“代表是不可变的” - *事件*只是*访问者*(添加/删除),所以不可变性的概念并不适用。 –

2

A + = B;从B处追加委​​托列表为A. 据复制B,不B.

参考的内容是一样的:

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

所以为了绝对是非常重要的。