C#笔记——事件

1、前提:委托(delegate)

 委托定义的方法:

  delegate  类型(int/double/bool)  Name/委托名(其实是个类)(类型  参数)

  委托有一个特性,就是将所有的委托相加之后,即串联起来时委托是挨个执行的,表示对象能够同时监听到所有串接的委托。即在委托之间可以用+、-符号,用-号的时候注意,若-的是最后一个加上去的委托,那么减之后这个委托就相当于木有了,但是若减的其他的委托,结果不会改变~

 

2、事件是如何触发的?

  1)使用重载运算符+= 注册要激发的控件的事件  2)编写事件处理函数

eg:按Btn1的时候激发Btn2的单击事件:

 

1 Btn.Click += new EventHandler(Btn2_Click);
2 private void Btn2_Click(object sender , EventArgs e)
3 {
4     MessageBox.Show("hello");
5 }

 

 

3、事件的标准写法

public event  委托类型 事件名字 (参数列表)

{

  add{+=}

  remove{+=}

}

   add与remove最终编译生成两个方法即与属性set和get的本质相同,用+=添加监听时调用add方法

 

4、C#中使用事件需要的步骤

  1)创建一个委托

  2)将创建的委托与特定事件关联(.Net类库中的很多事件都是已经定制好的,所以他们也有相应的一个委托,在编写关联事件处理程序——有时间发生我们要执行方法的时候,方法应该与这个委托有相同的签名即返回类型和参数类型)

  3)编写事件处理程序

  4)利用编写的事件处理程序生成一个委托实例

  5)把这个委托实例添加到产生事件对象的事件列表中,这个过程又叫订阅事件。

 

 

5、C#中事件产生和实现的流程

  1)定义A为产生事件的实例,a为A产生的一个事件

  2)定义B为接收事件的实例,b为处理事件的方法

  3)A由于用户或者系统产生一个a时间(例如点击一个Button,产生一个Click事件)

  4)A通过事件列表中的委托对象将这个事件通知给B

  5)B接到一个事件通知(实际是B.b利用委托来实现事件的接收)

  6)调用B.b方法完成事件处理

 

6、event与delegate区别

  delegate:事件是由委托来实现的,委托是一个类型,就是指向一个方法用的,提供函数指针的功能。委托支持组合,把一个委托和另一个委托组合起来,就都进了监听,调用的时候是一个个的挨着调用。将委托指向函数的时候,得看委托的签名(返回类型和参数类型)再定义函数的签名,应因为委托只能引用与其签名匹配的方法,委托equal  to 一个类型安全的函数指针或是一个回调。(vs2010可以自动生成)

  event:事件是一个类似于属性或字段的家伙;事件的实现就是一个private委托和一个add  and  remove。(private的原因:如果使用public,若将监听 = null或是伪造事件很容易,容易崩溃~但是将委托改为private之后外部无法调用,这样可以使用事件触发)

 

 

 

posted @ 2012-08-02 00:34  小猪闯天涯  阅读(197)  评论(0编辑  收藏  举报