事件与委托的补充
为什么要使用事件而不是委托变量?
在 C#中的委托和事件 中,我提出了两个为什么在类型中使用事件向外部提供方法注册,而不是直接使用委托变量的原因。主要是从封装性和易用性上去考虑,但是还漏掉了一点,事件应该由事件发布者触发,而不应该由客户端(客户程序)来触发。这句话是什么意思呢?请看下面的范例: NOTE:注意这里术语的变化,当我们单独谈论事件,我们说发布者
(publisher)、订阅者(subscriber)、客户端(client)。当我们讨论Observer模
式,我们说主题(subject)和观察者(observer)。客户端通常是包含Main()方法的
Program类。
classProgram {
staticvoid Main(string[] args) {
Publishser pub = newPublishser();
Subscriber sub = newSubscriber();
pub.NumberChanged += new
NumberChangedEventHandler(sub.OnNumberChanged);
pub.DoSomething(); // 应该通过DoSomething()来触发事件
pub.NumberChanged(100); // 但可以被这样直接调用,对委托变量的不恰当
使用
}
}
// 定义委托
publicdelegatevoid NumberChangedEventHandler(int count);
// 定义事件发布者


