2011-10-12 57 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); 

所以爲了絕對是非常重要的。