2010-01-26 35 views
0

我在看這個事件例如http://msdn.microsoft.com/en-us/library/aa645739%28VS.71%29.aspx問題在.NET 1.1 C#事件教程從MSDN

這一切對我來說很有意義,除了以下行

public event ChangedEventHandler Changed;

這是什麼呢? ?這是一些EVentCallbacks列表?爲什麼新的不在這裏使用?

編輯:爲什麼這不需要一個新的關鍵字?

public event ChangedEventHandler Changed;

+0

其中帶有「(VS.71)」的任何MSDN URL都來自.NET 1.1。不要使用它。本文的現代版本位於http://msdn.microsoft.com/en-us/library/w369ty8x.aspx。 – 2010-01-26 16:21:58

回答

2

它宣佈場地事件,類型ChangedEventhandler,稱爲Changed

private ChangedEventHandler changedHandler; 

public event ChangedEventHandler Changed 
{ 
    add 
    { 
     lock(this) 
     { 
      changedHandler += value; 
     } 
    } 
    remove 
    { 
     lock(this) 
     { 
      changedHandler -= value; 
     } 
    } 
} 

換句話說,它創建了一個事件哪些客戶機可以訂閱和取消訂閱,和一個可變來存儲那些訂閱:基本上它是大致相當於。事件訂閱/取消訂閱代碼只是將給定的處理程序與現有的處理程序組合/移除並將結果存儲在該字段中。

其結果是客戶可以訂閱事件,例如,

foo.Changed += ...; 

,然後當你提高的情況下,所有的處理程序被調用。

有關更多信息,請參見my article on events and delegates

+0

謝謝 - 我實際上正在閱讀您的MiscUtils代碼: - )... 爲什麼不使用專用ChangedEventHandler changedHandler = new ChangeEventHandler ...? – 2010-01-26 16:09:49

+0

你的意思是什麼? – 2010-01-26 16:10:16

+0

我的意思是爲什麼事件不必與新關鍵字一起剝離?這對我來說似乎很奇怪。 換句話說,你說「變量來存儲這些訂閱」 - 這個字段是如何分配的?這個字段什麼時候分配?那是什麼沒有意義 – 2010-01-26 16:13:10

0

這是您附上您的事件處理程序的實際自定義事件。

0

它正在做的是將名爲Changed的事件與ChangedEventHandler委託關聯。