编写Winform程序的时候,必须要对事件做重新思考,这是我这两天一直在考虑的,原来对事件机制了解的过浅,而且经常混淆概念。昨天在公共汽车上想了一下。有一个比喻,或者比较恰当。
事件相当于一种间谍,比如两个国家A以及B,B想知道A国的一些内部事物,则向A国派遗一个间谍C
那么B如何知道A国发生的事情呢?得这样引用
A.C+=new 事件处理机制。
间谍C只负责向B传递A发生一些事件的信息,而B呢得做专门的策略来处理这些事件信息。这就是EventHandle。
而C传过来的事件信息就是EventArgs,也就是我们默认使用的那个e.而Sender就很明显了,指的就是事件发生源,一般的都是指的A国本身(在A中使用this代替)
讲完了B国如何处理事件,那么就到达A国如何向外传递事件了,其实很简单的,就是设立代理(Delegate),每个事件都是一个代理类型,因为只有不同的代理才能传递不同的消息,比如单击事件与键入事件传出的消息就不同,单击事件的EventArgs得有当前鼠标位置,而键入事件得有健入的健的代码。这就是很大的不同点。
写得比较仓促,表达不太清楚,但希望对大家有用。
另外,请大家不要老想着只在WinForm或者WebForm中编写事件,其实你的类库也可以编写自己的事件。:)