您的位置:首页 > 编程语言 > C#

C#笔记——事件

2012-08-02 00:34 120 查看
1、前提:委托(delegate)

委托定义的方法:

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

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

2、事件是如何触发的?

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

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

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


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之后外部无法调用,这样可以使用事件触发)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: