正如你可以發表@Oded的question看到:
事件聲明的 委託實例添加了抽象和保護層。此保護可防止委託人 的客戶重置委託及其調用列表,並僅允許 從調用列表中添加或刪除目標。
這是必要的,因爲,使用委託和事件,兩個角色顯現出來:廣播和用戶。
從「C# 4 in a Nutshell」書:
的廣播是包含委託領域的類型。 廣播公司通過調用委託來決定何時廣播。
訂戶是方法目標收件人。用戶通過調用 廣播公司的代表上的+ =和 - =來決定何時開始和停止收聽。用戶不知道或干擾 與其他訂戶。
然後,一個事件是一個構造,用於展示此模型(訂閱者/廣播者模型)所需的委託功能。事件的主要目的是防止用戶互相干擾。 例如:
考慮一個朋友和你自己。你與你的朋友簽署協議。該協議包括:
- 當您完成一項活動後,您的朋友必須通知 其他朋友您的活動已結束。那些朋友不得不去 做其他活動。
在這種情況下,你是廣播,你的朋友是一個用戶,你的活動到底是事件。那位代表呢? 代表是你的朋友,因爲他必須把消息告訴其他朋友關於你的活動結束,以便讓他們做其他活動。
在其他方面:
public delegate void PriceChangedHandler(decimal oldPrice, decimal newPrice);
public class Stock
{
string symbol;
decimal price;
public Stock(string symbol) { this.symbol = symbol; }
public event PriceChangedHandler PriceChanged;
public decimal Price
{
get {return Price;}
set
{
if(price == value) return;
if(PriceChanged != null) /* if invocation list is not empty, fire the event */
PriceChanged(price, value);
price = value;
}
}
你可以看到Stock
每類的Stock
變化Price
時間觸發其PriceChanged
事件。
相關:http://stackoverflow.com/questions/29155/what-are-the-differences-between-delegates-and-events – Oded
可能的重複[爲什麼事件需要委託?爲什麼我們甚至需要事件?](http://stackoverflow.com/questions/10775540/why-do-events-need-delegates-why-do-we-even-need-events) –