2013-08-06 59 views
0

我正在學習c#,並且我研究了來自this鏈接的代表。爲什麼在c#中使用事件?

我明白爲什麼我們需要委託並瞭解多播委託。但我不清楚多播委託中的問題以及事件如何解決此問題。

任何人都可以解釋爲什麼我們正在使用事件以及他們如何解決多播委託中的問題。

另外,你可以給一個簡單的例子使用事件或鏈接。

在此先感謝。

+0

在大多數情況下,事件*是*組播代表。 * event *關鍵字確實做的唯一事情是阻止從定義事件的類之外執行委託。 –

+0

見http://csharpindepth.com/Articles/Chapter2/Events.aspx –

+0

檢查http://stackoverflow.com/questions/563549/difference-between-events-and-delegates-and-its-respective-applications – siddharth

回答

1

當您使用fire事件時,每個正在偵聽此事件的實例都會調用相應的事件處理程序。啓動處理程序的對象並不需要知道世衛組織正在「聆聽」它 - 這是一個巨大的優勢。

另一件事是異步調用事件。假設你想調用一些web服務來進行數據庫寫入。然後當電話結束時你想做其他事情 - 不管成功與否。如果沒有事件,這將非常困難 - 你怎麼知道寫入數據庫已經完成?你必須做出一個異步的無限循環,這將繼續檢查 - 這是一個奇怪的事情,你真的不想這樣做。處理類似情況的事件非常簡單:

讓web服務具有功能TryToWriteToDatabase()和兩個事件 - DatabaseUpdateSuccessDatabaseUpdateFail。你只需爲它們寫兩個事件處理程序 - 適當的一個將在web服務上被異步觸發,並且無論調用的結果如何,你都可以處理它。

+1

'發射人員發出的物體並不知道​​世界衛生組織正在「傾聽」它 - 這是一個巨大的優勢「是嗎?我不這麼認爲。不知道它不能調用Type的'Instance method'。確實'Delegate.Target'屬性擁有誰是監聽者! –

+0

@SriramSakthivel - 你說得對,但我想指出,無論有多少聽衆(無論是哪種類型),都不需要修改觸發事件的類。 –

+0

但是'處理程序不知道世衛組織正在'聽'它'這個聲明是錯誤的,這讓我在這裏註冊我的評論 –

相關問題