正如你可以发表@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) –