代码改变世界

《锁哥都能看懂的C#知识系列——事件的理解》

2012-07-24 15:59  hubeibo  阅读(440)  评论(0)    收藏  举报

本博文没有长篇大论,一是咱没有那深厚的理论来滔滔不绝,二是也没时间写那么多文字。

文笔较差工作经验尚浅大家多指教。

 

1.事件的理解:

就是某一类的实例(事件发布者)触发了一个动作(事件),通知所有注册了这个动作的类的实例(事件订阅者),然后所有订阅者去执行自身定义的响应该动作的行为(事件处理程序)。

例子:最直接的例子就是webform中的Button类的实例(事件发布者),我们在开发的时候拖出一个Button到页面实例上(事件订阅者),然后双击这个Button就会在页面实例的后台代码自动创建出一个方法(事件处理程序)。

如图:

这种代码我们想必写过无数遍了,但在拖控件与双击控件自动生成代码的时候有没有想过事件的发布者和订阅者是如何联系起来的呢?

 

2.注册事件的具体步骤:

Asp.net自动生成的事件代码害死人,如图:

在webform中这种事件的关联隐藏了事件注册的代码的本质(委托)。

如图:这才是真正事件定义的本质(委托):事件订阅者(Button所在webform页面实例)在事件发布者(Button实例)的事件(Click)上订阅了事件处理程序(btn_Click)。

以上代码就很容易看出Click事件其实是一个委托,我们的btn_Click方法添加到委托当中。当页面上的按钮被点击,Click关联的委托链表上的方法(btn_Click)自然就被触发并执行了。

 

小结:

在开发中,就是双击Button自动产生代码,然后就开始写相应的程序,但是知其然更要知其所以然。

因此平时开发中一些不加思索的代码有时候也需要去理解一下框架自动生成代码的原理,这样才能让自己的技术真正提高。

如果没有弄清事件处理的具体原理并且用惯Asp.net这种事件开发方式的话,在初次接触Silverlight和WPF的话那将是很头疼的事情。

下次写一个自定义事件处理程序吧,这次就写这么多~